前言
我们在写一个简单的爬虫时,爬虫代码很容易就会被后台检测到进而封掉。那么怎么样才能避免这些事发生呢?这一这篇文章我们一起来学习,如何健壮我们的爬虫代码。
学习Python中有不明白推荐加入交流裙
号:735934841
群里有志同道合的小伙伴,互帮互助,
群里有免费的视频学习教程和PDF!
目录
- Spider
- Middleware
- 瞎比比
Spider
当 start_urls 未被指定,会调用 start_requests() ,该方法可以用于在爬取数据之前,先进行模拟登陆。
import scrapy from scrapy.http import Request from scrapy.selector import Selector from urllib.parse import urljoin from doubanTop250.items import Doubantop250Item class DoubanTop250Spider(scrapy.spiders.Spider): # 此处为上面留下的小坑 name = "douban" # 设置允许爬取的域名 allowed_domains = ["douban.com"] # header信息 my_header = { 'Host': 'www.douban.com', 'Referer': 'https://movie.douban.com', } # 表单需要提交的数据 form_data = {'user': 'zone', 'pass': 'zone7'} # 自定义信息,向下层响应(response)传递下去 customer_data = {'key1': 'value1', 'key2': 'value2'} def start_requests(self): return [scrapy.FormRequest("https://movie.douban.com/login", formdata=self.form_data, # 表单提交的数据 headers=self.my_header, method='POST', # GET or POST meta=self.customer_data, # 自定义,向response传递数据 errback=self.error_handle, callback=self.logged_in, # 如果需要多次提交表单,且url一样,那么就必须加此参数 dont_filter,防止被当成重复网页过滤掉了 dont_filter=True )] def logged_in(self, response): # 解析模拟登陆数据 pass def parse(self, response): # 默认回调函数 pass def close(self,reson): # 关闭时调用 pass
scrapy.FormRequest 部分参数解析