在小型的爬虫项目中,我们只需要requests框架就能完成爬虫了,但是遇到大规模的爬虫单单用requests就会比较吃力,所以现在我们学习用scrapy框架来完成爬虫。
scrapy 安装
通过pip install Scrapy
即可安装 Scrapy,然后在空白的文件目录下初始化一个爬虫项目scrapy startproject spider_demo
spider_demo为爬虫项目的名称。通过命令初始化后,我们可以看到下图的目录结构
__init__.py 为包中的初始化文件,便于识别包
items 爬虫实体对象
middlewares 爬虫中间件 -- 网络请求前后所做的事情
pipelines 管道 -- 将输出的item管理起来
setting 爬虫配置文件
spiders 爬虫文件夹 爬虫脚本的父级文件夹
编写我们的第一个爬虫
在spiders创建一个baidu_spider.py
import scrapy
from scrapy import Selector
from scrapy.cmdline import execute
# 百度新闻爬虫
class baiduSpider(scrapy.Spider):
name = 'baiduNews'
# 指定爬取地址
start_urls = ['https://news.baidu.com/']
# 解析爬取结果
def parse(self, response):
li_list = response.xpath('//li[contains(@class,"hdline")]')
for i in li_list:
print(''.join(Selector(text=i.get()).xpath('//a//text()').extract()))
print('==========================')
#命令行启动爬虫
if __name__ == '__main__':
execute(['scrapy', 'crawl', 'baiduNews'])
启动main函数,我们的爬虫脚本就会自动爬取百度新闻的网页了
解析
爬取网页后我们需要对网页信息提取,scrapy提供了一个很好用的解析语法xpath,xpath解析html后将返回一个Selectors对象,通过get()获取Selectors单个的文本信息,extract()获取文本数组对象。通过学习基本的xpath语法我们就能完成网页的解析,在必要时,我们还可以通过正则表达式来解析网页获取我们想要的信息
总结
利用好scrapy,编写不同的中间件,更利用我们的爬虫。