她的野战案例

2020-02-13 14:36:34 浏览数 (1)

使用scrapy爬取豆瓣图书Top250信息

  • 任务测试:使用scrapy爬取豆瓣图书Top250信息
  • 网址:https://book.douban.com/top250?start=0
  • 使用shell命令直接爬取报403错误
代码语言:javascript复制
# 在命令行下直接运行scrapy shell命令爬取信息,报403错误

$ scrapy shell https://book.douban.com/top250

>>> response.status
>>> 403
  • ① 新建一个项目douban,命令如下所示:
代码语言:javascript复制
scrapy startproject douban
  • ② 新建一个Spider类,名字为dbbook,命令如下所示:
代码语言:javascript复制
cd douban

scrapy genspider dbbook book.douban.com
  • 编写爬虫代码。如下:
代码语言:javascript复制
# -*- coding: utf-8 -*-
import scrapy

class DbbookSpider(scrapy.Spider):
    name = 'dbbook'
    allowed_domains = ['book.douban.com']
    start_urls = ['https://book.douban.com/top250?start=0']

    def parse(self, response):
        #print("状态:")
        pass
  • ③ 执行爬虫命令,排除错误。

$ scrapy crawl dbbook #结果返回403错误(服务器端拒绝访问)。

原因分析:默认scrapy框架请求信息中的User-Agent的值为:Scrapy/1.5.0(http://scrapy.org).

解决方案:我们可以在settings.py配置文件中:设置 USER_AGENT 或者DEFAULT_REQUEST_HEADERS信息:

代码语言:javascript复制

USER_AGENT = 'Opera/9.80(WindowsNT6.1;U;en)Presto/2.8.131Version/11.11'

或者
...
DEFAULT_REQUEST_HEADERS = {
   'Accept': 'text/html,application/xhtml xml,application/xml;q=0.9,*/*;q=0.8',
   'Accept-Language': 'en',
   'User-Agent':'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/66.0.3359.139 Safari/537.36',
}
...
  • ④ 开启Downloader Middleware中间件
  • 在项目的settings.py配置文件中:开启设置DOWNLOADER_MIDDLEWARES信息:
代码语言:javascript复制
DOWNLOADER_MIDDLEWARES = {
    'douban.middlewares.DoubanDownloaderMiddleware': 543,
}
代码语言:javascript复制
  def process_request(self, request, spider):
        #输出header头信息
        print(request.headers)
        #伪装浏览器用户
        request.headers['user-agent']='Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/66.0.3359.139 Safari/537.36'

        return None

岁月有你,惜惜相处

0 人点赞