master
wkyuu 3 years ago
parent 67b0acb192
commit c372046c7b

@ -210,6 +210,30 @@ redisconn = redis.Redis(host = '127.0.0.1', port = '6379', password = 'x', db =
使用线程数为16的情况下完整跑完五个种类共 1500条数据用时80s 使用线程数为16的情况下完整跑完五个种类共 1500条数据用时80s
1在爬取的视频评论很多的情况下效率太低且频次太高了容易被ban。应该设定一下比如说只爬几页或者只爬热门评论。而且。。哔哩哔哩的评论区是其他加载的本爬虫在requests.get的时候会多次爬取太危险了。为了一条数据就多次访问被ban风险更高了。可以改成对单个页面就取一次网页源代码但是这个需要真实浏览器来访问才能拿到selenium框架然后对这个源代码进行数据提取操作这样可以比较好地减少爬虫访问量降低被ban的风险。
2爬虫结构是先完全爬取数据存到临时内存中最后才存入文件。风险太大如果中途被ban了容易导致整个爬取的过程前功尽弃且之前数据全都丢失。
2.1,线程作用效果应为
结构:视频{页数{父评论{子评论}}}
采用多线程爬取父评论+子评论,也就是一次能对多个父子评论爬取数据;或者采用多线程爬取页数中的评论,一次能爬取多个页面。后者效率更高。
2.2,但是由于该爬虫设计结构是把全部数据都先爬取再存起来,这样子要求线程对同一个字符串结构进行数据追加,容易导致混乱(即 在线程优先级不同的情况下,多个线程同时操作一个全局字符串,可能上一条还是父评论,下一条就变成另一条父评论的子评论了。)。
2.3整改建议是采用多线程对多个页面爬取数据某个线程结束时即爬完一页就把该页对应的字符串存到csv文件中采用线程锁来控制每次存数据时都仅单个占用csv文件防止数据混乱。这一步需要修改数据的存储过程的流程。
~~3爬取效果不好爬取父评论+子评论的方式,实际上意义不大。意思就是父和子评论都混到一起了,没有主次效果,应该加个标示便于直观显示。~~
## 参考链接 ## 参考链接
1[selenium+python自动化100-centos上搭建selenium启动chrome浏览器headless无界面模式](https://www.cnblogs.com/yoyoketang/p/11582012.html) 1[selenium+python自动化100-centos上搭建selenium启动chrome浏览器headless无界面模式](https://www.cnblogs.com/yoyoketang/p/11582012.html)
@ -242,4 +266,6 @@ redisconn = redis.Redis(host = '127.0.0.1', port = '6379', password = 'x', db =
15[requests库使用方法汇总笔记](https://wenku.baidu.com/view/fa71322401020740be1e650e52ea551810a6c928.html) 15[requests库使用方法汇总笔记](https://wenku.baidu.com/view/fa71322401020740be1e650e52ea551810a6c928.html)
16 16[爬虫常见的HTTP错误代码及错误原因](https://blog.csdn.net/Smart_look/article/details/109967222)
17

@ -1,18 +1,17 @@
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
import random
import requests
from lxml import etree
from selenium import webdriver from selenium import webdriver
from selenium.webdriver.chrome.options import Options from selenium.webdriver.chrome.options import Options
from lxml import etree
import random
from zmq import proxy
import settings import settings
import requests
import json
headers = { headers = {
#'User-Agent': random.choice(settings.USER_AGENT) 'User-Agent': random.choice(settings.USER_AGENT)
'User-Agent': settings.USER_AGENT[1] # 'User-Agent': settings.USER_AGENT[1]
} }
def getsource(url): def getsource(url):
@ -58,4 +57,4 @@ if __name__ == "__main__":
url = r"https://www.vveby.com/search?keyword=" + jdurl url = r"https://www.vveby.com/search?keyword=" + jdurl
print(url) print(url)
useRequests(url) useRequests(url)
print('done') print('done')

Loading…
Cancel
Save