爬虫过程当中间遇到的那些坑

  1. fake-useragent请求知乎的坑

  • 在用scrapy爬取知乎的时候,用fake-useragent模块随机添加请求头的时候发现知乎跳转到一个提示浏览器版本太低的网页。
  1. 用fake-useragent添加请求头请求别的网站的时候都没有出现过这种问题。
  2. 我将请求头换成本身使用的chroem浏览器的请求头的时候,没有异常。
  3. 我又用fake-useragent从新请求,发现也没有异常。
  4. 再次用fake-useragent从新请求,又跳转到一个提示浏览器版本太低的网页。

  我百思不得其解,本身思考以下:综合一、3,说明fake-useragent应该没问题的,综合三、4我怀疑这是知乎使用的一种反爬机制,故意将错误引到浏览器版本太低的网页,但实际问题并不在此,在这中间花了整整半天时间,后面我又想到用个人另一台电脑,而后将浏览器的useragent发送过来,而后使用发送过来的useragent从新请求知乎,发现并无异常。因而猛然想到fake-useragent中的useragent是随机提取出来的,是否是有的提取出来的useragent是比较老旧的,因此知乎识别处理啊,致使出现异常呢?为了验证本身的想法,我又用fake-useragent随机提取的useragent反复请求,有的能成功,有的提示浏览器版本低的异常,遂验证了个人想法。shell

  综上:知乎是一个对浏览器版本要求很高的网站,不少旧版的浏览器都不能访问知乎,而fake-useragent内的请求头数据并无一直更新到最新,只能测试多个,而后选择可用的便可。浏览器

 

scrapy shell 添加 user-gent的坑

  • 在用scrapy shell -s USER_AGENT=‘Mozilla/5.0 (Windows NT 10.0; …) Gecko/20100101 Firefox/60.0‘ +请求网址  的时候报一些异常的错误,发现这个是因为本身平时引号都用单引号,可是此处的Mozilla/5.0 (Windows NT 10.0; …) Gecko/20100101 Firefox/60.0必需要用双引号括起来才行!

requests请求user-gent的坑

headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; …) Gecko/20100101 Firefox/60.0'}
re = requests.get(url, headers=headers) re.encoding = re.apparent_encoding print(re.text)

报错以下:app

UnicodeEncodeError: 'latin-1' codec can't encode character '\u2026' in position 30: ordinal not in range(256)

此错误看着是编码错误,实际上不是,我换一个user-agent又能够了,其实这是由于浏览器在显示User-Agent属性时,应为属性值过长,因此使用了省略号,致使添加过程当中形成了编译错误。scrapy

方法策略:若是scrapy中有多个item的时候,该如何将不一样的item在pipeline中做不一样的处理呢?

  1. item.__class__.__name__ == 'item 的名字'
  2. 在各自定义的item中间添加inser方法。
相关文章
相关标签/搜索