防止爬虫被ban,随机更换代理IP,随机User-Agent,及setting配置,PhantomJS抓取JS网页

本文介绍了防止Scrapy爬虫被服务器ban的多种策略,包括使用代理IP池、随机User-Agent、增加下载延迟以及设置并发请求限制。同时,讨论了在项目中定义多个Item、存储不同Item以及处理重复抓取的问题,并提供了具体的代码示例,如使用中间件处理代理和User-Agent,以及利用PhantomJS抓取JavaScript渲染的网页。
摘要由CSDN通过智能技术生成

当有CONCURRENT_REQUESTS,没有DOWNLOAD_DELAY 时,服务器会在同一时间收到大量的请求。

当有CONCURRENT_REQUESTS,有DOWNLOAD_DELAY 时,服务器不会在同一时间收到大量的请求。

两种方法能够使 requests 不被过滤: 
1. 在 allowed_domains 中加入 url 
2. 在 scrapy.Request() 函数中将参数 dont_filter=True 设置为 True

去掉重复过滤器无望的情况下, 可以先在Request的初始化函数中, 传入dont_filter=True.

 
理解:
第一个作用:
(allowed_domains中限制允许发送请求的url,假如你发送的请求被allowed限制,你又想发送请求,在request请求中设置参数dont_filter=True)

第二个作用:
重复抓取一个页面的方法
 # scrapy默认会过滤重复网页,发起Request添加dont_filter=True,则可以重复请求
 # 使用的时候要注意, 不要进入死循环

文档详解:VVVV
dont_filter( boolean) - 表示调度程序不应过滤此请求。当您想要多次执行相同的请求时,可以使用此选项来忽略重复过滤器。小心使用它,否则您将进入爬行循环。默认为False。

 

使用中遇到的一些问题

  • 一个爬虫项目中,是否支持多个Item?
  • 在一个页面抓取多个Item?不同的Item如何存储?
  • 爬虫进入下一级网页?
  • 在爬虫中携带自定义数据?
  • 重复抓取一个页面的方法?
  • 分别指定每个爬虫的设置?
  • 防止爬虫被ban?

针对以上问题,下面给出具体的代码示例

  • 定义可以定义多个Item
# myspider/items.py

import scrapy

class Item1(scrapy.Item):
    url = scrapy.Field()
    name = scrapy.Field()

class Item2(scrapy.Item):
    url = scrapy.Field()
    job_id = scrapy.Field()
    job_title = scrapy.Field()

  • 具体的爬虫脚本

# myspider/spiders/myspider.py

class Spider1(CrawlSpider):
    # 爬虫的名字
    name = "spider1"
    
    # 要抓取的网页限制
    allowed_domains = ["mysite.com"]
    
    # 指定开始抓取的url
    start_urls = [
        "http://mysite.com/",
        "http://mysite2.com/",
    ]
    
    # parse方法为抓取入口
    # 抓取 start_urls 中的网址
    def parse(self, response):
        sel = Selector(response)
        
        # 在一个页面抓取多个Item
        # 在分析网页过程中,通过 yield item ,可以生成多个item
        item = new Item1()
        item['url'] = response.url
        item['name'] = sel.xpath('').extract()
        yield item
        
        item2 = new Item2()
        item2['url'] = response.url
        item2['job_id'] = sel.xpath('//h2[1]/a/@hre
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值