上一章对Scrapy框架做了简单的介绍,并且创建了FirstSpider这个爬虫项目,生成的爬虫目录结构如下:
items.py:定义你想抓取的数据(也可以直接放在TieBa.py中定义)
middlewares.py:用来设置各种中间件的文件
pipelines.py:用来将item存储到数据库中
settings.py:存储本爬虫的一些配置信息,比如:请求头、ip代理池等
TieBa.py:编写爬虫代码(主要部分)
scrapy.cfg:项目的配置文件
主要定义你想抓取哪些数据,比如这里我们要获取标题、发布者、回复数
# -*- coding: utf-8 -*-
# Define here the models for your scraped items
#
# See documentation in:
# https://docs.scrapy.org/en/latest/topics/items.html
import scrapy
class FirstspiderItem(scrapy.Item):
# define the fields for your item here like:
title = scrapy.Field() # 标题
author = scrapy.Field() # 发布者
rep_num = scrapy.Field() # 回复数
这是整个爬虫项目中,代码编写的主要部分。
# -*- coding: utf-8 -*-
import scrapy
from FirstSpider.items import FirstspiderItem
class TiebaSpider(scrapy.Spider):
name = 'TieBa' # 爬虫名
allowed_domains = ['tieba.baidu.com'] # 爬虫域
start_urls = ['http://tieba.baidu.com/f?fr=wwwt&kw=python'] # 爬虫起始地址
def parse(self, response):
for li in response.xpath('//li[@class=" j_thread_list clearfix"]'):
item = FirstspiderItem()
item['title'] = li.xpath('./div/div[2]/div[1]/div[1]/a/text()').extract_first()
item['author'] = li.xpath('./div/div[2]/div[1]/div[2]/span[1]/span[1]/a/text()').extract_first()
item['rep_num'] = li.xpath('./div/div[1]/span/text()').extract_first()
yield item
其中,爬虫名和爬虫域在创建爬虫时就已经设置,起始地址即你爬虫最开始的地址。对于页面的解析,使用的是xpath,关于xpath的学习可以参考xpath菜鸟教程。
这里我们对于解析的过程做些简单的描述:
(1)浏览器推荐使用chrome,能够更加方便地进行页面解析。
(2)右击你想要获取的数据部分,然后选择检查,便可以看到对应部分的网页源代码。整体源代码为:
可以发现,每一条li对应一条帖子,帖子里的相关信息在每一条li下,所以使用for循环遍历此页面下的每一条li,然后找到li下所要获取数据的节点位置并将其取出。
打开CMD,转到项目所在的目录下,执行scrapy crawl TieBa,结果如下:
为了更好地看到数据,也可以执行scrapy crawl TieBa -o tieba.csv,将数据结果保存到csv文件中。至此,一个简单的爬虫已经可以运行了,但是需要获取的数据肯定不是仅仅这一页,所以下一章节对爬虫进行自动翻页来获取更多的数据。