环境配置
- Ubuntu 16.04
- Python 3.5
技术框架
- Scrapy
需求目标
本项目为汽车口碑分析,第一步需要爬取对于不同车型的评论数据。
选择58车的车型分类爬取评论数据。
爬取流程
先获取每个车型的链接,以下图中红框内的车型为例
打开链接后,抓取下图红框中的总评分,写入文件中。
写入总评分后,通过拼接链接进入该车型的用户评论页面。
通过第一步中获取的链接拼接上
list_s1_p1.html
,组成用户评论页面的链接。【注】此为第一页的链接,若还有下一页,下述步骤会提及处理方法。
抓取评论页面中的各种数据,如
id
,评分
,评论
等。若该评论页面还有
下一页
,则继续抓取下一页中的评论数据。【方法】
判断页面中是否有
下一页
元素,若有则回调解析评论页面的方法。将爬取的数据保存到文件中。
详细步骤
创建新工程
先创建工程目录
cd /home/t/dataset/ |
创建新工程
scrapy startproject carSpider |
编辑items.py
文件
# -*- coding: utf-8 -*- |
编写carSpider.py
文件
import scrapy |
【解析】
#定位到用户评论元素 |
此句代码定位的元素如下图所示,定位到的是评论页面每条评论的元素整体。
for info in infos: |
uid
定位到的元素如下图所示,
score
定位到的元素如下图所示,获取score
元素的style
属性,值形如width:80%
,需要通过getScore()
方法转换为五分制分数。
try: |
先定位是否有优点
元素,如下图红框所示,若有该元素,则获取优点
元素的下一个兄弟节点内容,如下图蓝框所示,若无则为空。
#获取`下一页`元素,若有则回调`parse_remark`第三层解析方法,即继续获取下一页用户评论数据 |
解析完上述内容,判断用户评论页面是否有分页,定位是否有下一页
元素,如下图红框所示,若有则获取该元素链接,如下图橙框所示。
获取之后,回调parse_remark
方法解析下一页的评论页面。
编辑pipelines.py
文件
# -*- coding: utf-8 -*- |
编辑settings.py
文件
# -*- coding: utf-8 -*- |
【解析】
ROBOTSTXT_OBEY = False |
将原来的True
改为False
。
ITEM_PIPELINES = { |
将原来的注释去掉,即注册pipelines,否则无法使用该pipelines。
运行爬虫
在项目根目录下新建文件entrypoint.py
from scrapy.cmdline import execute |