scrapy创建爬虫

原理:

scrapy流程图

步骤:

  1. scrapy环境安装(默认已有Python环境和pi包管理工具
1
pip install scrapy
  1. 创建工程
1
scrapy startproject 项目名
  1. 创建爬虫文件

先导航到已创建的工程下,然后再创建爬虫文件

1
2
cd 项目名
scrapy genspider fileName 目标网站
  1. 在 items.py 里定义需要抓取的数据属性

  2. 运行程序测试

1
scrapy crawl 爬虫名(fileName)
  1. 配置启动文件main.py:(可省略此步骤)
1
2
3
from scrapy import cmdline

cmdline.execute('scrapy crawl 爬虫名'.split())
  1. 利用xpath编写解析文件(主要获取节点信息),编写xpath规则:(也可自主使用其他解析工具)
1
2
//div[@class='article']//ol[@class='grid_view']/li
注:先定位到目标的上一级在进行解析
  1. 在爬虫文件里定义解析名,使用response调用xpath写入xpath规则:
1
movie_list = response.xpath("//div[@class='article']//ol[@class='grid_view']/li")
  1. 根据上一级步骤7解析的结果进一步获取目标信息(从items里我们自定的目标名进行获取),分别进行目标结果的解析:继续编写xpath解析
1
2
3
douban_item['serial_number'] = i_item.xpath(".//div[@class='item']//em/text()").extract_first()

注://前的.不能缺少
  1. 目标数据获取解析完成后回传存储数据:
1
yield douban_item
  1. 翻页设置(根据需要)同步骤9一样获取xpath解析,然后逐个翻页:
1
2
3
if next_link:
next_link = next_link[0]
yield scrapy.Request("https://movie.douban.com/top250"+next_link, callback=self.parse)

爬虫页完整代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
import scrapy
from douban.items import DoubanItem

class DoubanSpiderSpider(scrapy.Spider):
# 爬虫名
name = 'douban_spider'
# 允许的域名
allowed_domains = ['movie.douban.com']
# 入口url,扔到调度器里面去
start_urls = ['https://movie.douban.com/top250']
# 默认解析方法
def parse(self, response):
# 循环条目
movie_list = response.xpath("//div[@class='article']//ol[@class='grid_view']/li")
for i_item in movie_list:
# 导入item文件
douban_item = DoubanItem()
# 详细的xpath进行数据解析
douban_item['serial_number'] = i_item.xpath(".//div[@class='item']//em/text()").extract_first()
douban_item['movie_name'] = i_item.xpath(".//div[@class='info']/div[@class='hd']/a/span[1]/text()").extract_first()
content = i_item.xpath(".//div[@class='info']//div[@class='bd']/p[1]/text()").extract()
# 多行数据处理
for i_content in content:
content_s = "".join(i_content.split())
douban_item['introduce'] = content_s
douban_item['star'] = i_item.xpath(".//span[@class='rating_num']/text()").extract_first()
douban_item['evaluate'] = i_item.xpath(".//div[@class='star']/span[4]/text()").extract_first()
douban_item['describe'] = i_item.xpath(".//span[@class='inq']/text()").extract_first()
# 将数据yield到pipeline里方便数据清洗
yield douban_item
# 解析下一页规则,去后一页的xpath
next_link = response.xpath("//span[@class='next']/link/@href").extract()
if next_link:
next_link = next_link[0]
yield scrapy.Request("https://movie.douban.com/top250"+next_link, callback=self.parse)

  1. 添加浏览器标识(有的网站也可不用添加就能访问)

    打开 settings.py 取消 USER_AGENT 的注释,打开浏览器里按F12,找到 USER_AGENT 复制到 settings 文件中

数据清洗 re.S 可以去除空白字符

转为JSON类型存储:json.dumps(str,ensure_ascii=False,indent=4)

·