使用scrapy爬取豆瓣图书Top250信息
- 任务测试:使用scrapy爬取豆瓣图书Top250信息
- 网址:https://book.douban.com/top250?start=0
- 使用shell命令直接爬取报403错误
# 在命令行下直接运行scrapy shell命令爬取信息,报403错误
$ scrapy shell https://book.douban.com/top250
>>> response.status
>>> 403
- ① 新建一个项目douban,命令如下所示:
scrapy startproject douban
- ② 新建一个Spider类,名字为dbbook,命令如下所示:
cd douban
scrapy genspider dbbook book.douban.com
- 编写爬虫代码。如下:
# -*- 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
信息:
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
信息:
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
岁月有你,惜惜相处