scrapy分页抓取网页(【】本次项目利用scrapy爬虫框架实现框架 )
优采云 发布时间: 2021-10-04 09:06scrapy分页抓取网页(【】本次项目利用scrapy爬虫框架实现框架
)
1、项目介绍
本项目使用scrapy爬虫框架抓取豆瓣top250的详情页信息。主要字段如下:
主要领域:
Num——》电影排行榜
DetailLink——》详情页链接
片名——》片名
RatingNum——"评级
票数——》评价数
导演——》导演
编剧——》编剧
演员——》主演
类型——“类型
发布日期——》发布时间
运行时间——》长度
2、创建项目文件
创建一个scrapy项目
crapy startproject douban
创建爬虫源文件
scrapy genspider douban250 www.douban.com
3、爬虫文件配置3.1配置设置文件
1)防爬配置
# 关闭 robots
ROBOTSTXT_OBEY = False
# 配置请求头
```python
USER_AGENT = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.107 Safari/537.36'
# 为方便调试 修改日志等级为‘ERROR’
LOG_LEVEL = 'ERROR'
2)打开管道
ITEM_PIPELINES = {
'douban.pipelines.DoubanPipeline': 300,
}
3.2 配置项目文件
定义要爬取的字段
class DoubanItem(scrapy.Item):
# define the fields for your item here like:
# name = scrapy.Field()
Num = scrapy.Field()
DetailLink = scrapy.Field()
Title = scrapy.Field()
RatingNum = scrapy.Field()
Votes = scrapy.Field()
Director = scrapy.Field()
Writer = scrapy.Field()
Actor = scrapy.Field()
Type = scrapy.Field()
ReleaseDate = scrapy.Field()
RunTime = scrapy.Field()
4、爬虫文件写入4.1、字段空值处理
在爬取字段的过程中,部分电影详情页没有对应的字段信息。程序运行到这里会报错,影响爬虫的运行。其次,为了存储信息结构的完整性,应该从这个记录中给出这个字段。空值占用。为了处理上述问题,可以编写一个处理字段空值的函数如下:
def try_except(self, response, xpath_str):
try:
field = response.xpath(xpath_str).extract_first()
except:
field = ''
return field
4.2、 目录页面分析函数编写
def parse(self, response):
li_list = response.xpath('//*[@id="content"]/div/div[1]/ol/li')
for li in li_list:
item = DoubanItem()
# 解析每个字段时调用4.1定义的空值处理函数,传入网页相应和xpath表达式
item['Num'] = self.try_except(li, './/em/text()')
item['DetailLink'] = self.try_except(li, './/a[1]/@href')
# 提交详情页链接,经过调度,执行生成scrapy.http.Response 对象并送回给详情页解析方法
yield scrapy.Request(item['DetailLink'],
callback=self.parse_detail_html,
meta={'item': deepcopy(item)})
4.2、 翻页代码编写
抓取下一页的链接并完成链接,将下一页的响应对象交给目录页面分析方法
<p>next_url = 'https://movie.douban.com/top250' + self.try_except(response, '//*[@id="content"]/div/div[1]/div[2]/span[3]/a/@href')
print(f'已完成:{self.i}页')
self.i += 1
if self.i