scrapy 简介:
1.创建项目(项目名字不能包含中文,开头不能是数字)
创建一个项目文件夹,cmd 进入该文件夹下 输入:
scrapy startproject scrapy_58
创建好了的项目目录结构
2.创建爬虫文件
在 spiders 文件夹中创建爬虫文件
进入 spiders 文件目录创建爬虫文件
scrapy genspider 爬虫文件的名字 域名
例如: scrapy genspider baidu www.baidu.com
3.运行爬虫
scrapy crawl 爬虫的名字
例如:scrapy crawl baidu
百度会有一个 robots 协议,不让爬,修改 settings.py 中 :ROBOTSTXT_OBEY = False
4. scrapy 项目结构
项目名字
spiders 文件夹(存储的是爬虫文件)
init
init
items 定义数据结构的地方,爬取数据都包含哪些
middleware 中间件 代理
pipelines 管道 用来处理下载的数据
settings 配置文件 robots协议 UA定义
5.工作原理
spiders 发送 url 给引擎,引擎 发给 调度器;
调度器 发送请求给 引擎,引擎 发给 下载器;
下载器 上互联网拿数据,下载器 把拿到的数据发给 引擎; (response)
引擎 把数据发给 spiders, spiders 通过xpath解析数据;
spiders 解析结果为数据发给 管道, 管道 获得解析成功的结果存储文件。
spiders 解析结果为url发送给 引擎,引擎 发给 调度器;
6. ipython
pip install ipython
方便调试 scrapy xpath ,不用每次去运行 scrapy crawl baidu
win + r => cmd 输入: scrapy shell www.baidu.com
例如:
scrapy shell www.baidu.com
a = response.xpath('//input[@id="su"]/@value)
a.extract_first()
爬取 58后端开发职位网页
获取请求的 url,这里的 url 在上面第二步创建爬虫的时候需要去掉 https:// 然后输入。
content 即为 网页源码,然后从里面提取需要的数据即可
获取汽车之家宝马名字和价格
按照前面的步骤创建好爬虫文件。
获取请求的 url
由于该项目过于简单,这里只在 carhome.py 中写入代码,其他文件未改动。
import scrapy
class CarhomeSpider(scrapy.Spider):
name = 'carhome'
allowed_domains = ['https://car.autohome.com.cn/price/brand-15.html']
# 请求接口 html 结尾的不需要在末尾加 /
start_urls = ['https://car.autohome.com.cn/price/brand-15.html']
def parse(self, response):
carname_list = response.xpath('//div[@class="main-title"]/a/text()') # xpath 选择汽车名字
carprice_list = response.xpath('//div[@class="main-lever"]//span/span/text()')
for i in range(len(carname_list)):
carname = carname_list[i].extract() #提取 seletor 对象的data属性值
carprice = carprice_list[i].extract()
print(carname,carprice)
结果输出如下: