爬虫之scrapy高级部分等相关内容-138 (2)

了解

6 集成selenium 1 在爬虫中写
 class ChoutiSpider(scrapy.Spider):
     name = \'chouti\'
     allowed_domains = [\'www.bilibili.com\']
     start_urls = [\'https://www.bilibili.com/v/dance/otaku/#/all/default/0/1/\']
     bro=webdriver.Chrome(executable_path=\'./chromedriver\')
     bro.implicitly_wait(10)
     @staticmethod
     def close(spider, reason):
         spider.bro.close()
         
         
2 在中间件中直接使用
 class CnblogsSpiderDownloaderMiddleware:
     def process_request(self, request, spider):
         spider.bro.get(request.url)
         response=HtmlResponse(url=request.url,body=bytes(spider.bro.page_source,encoding=\'utf-8\'))
         return response
       
       
3 隐藏浏览器?无头浏览器
7 去重规则 1 默认会去重,使用了
from scrapy.dupefilters import RFPDupeFilter
2 在默认的setting中配的
3 本身原理是使用的是集合去重

4 更高级部分
# 是不是同一个地址
127.0.0.1/?name=lqz&age=19
127.0.0.1/?age=19&name=lqz
# 本质原理,把?后的打散了,再排序
fp = self.request_fingerprint(request) # 得到一个指纹,上面那两个地址结果一样




## 自定义去重规则
如果你自己写去重类,如何使用?
写一个类,继承 BaseDupeFilter,重写def request_seen(self, request):
返回true表示爬过了
返回false表示没有爬过


# 你有个更牛逼的去重方案
-集合去重可以,存在问题,如果地址特别多,上亿个地址,集合会特别大,会非常占用内存
 -极小内存,完成去重(布隆过滤器)

 

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zwpyyf.html