Scrapy安装
终端输入pip install scrapy
但是大部分情况下这样使用都会报错,是因为我们缺少一个twisted库,
Archived: Python Extension Packages for Windows - Christoph Gohlke (uci.edu)
在这可以找到我们需要的版本
cp后面的数字是Python版本,win后面的是系统版本
下载完成后,终端输入 pip + instal + twisted路径 安装
切记安装完成twisted后再安装Scrapy
有时候也会报错pip版本过低,需要在终端输入以下指令:
python -m pip install --upgrade pip
Scrapy基本使用
打开终端(win + r 输入cmd 回车)
推荐把项目放在平时使用的文件夹下,可以输入指令cd+文件目录
创建爬虫项目:scrapy startproject + 项目名称(不能以数字或汉字开头)
创建爬虫文件(要在spiders文件夹中取创建)
cd 项目的名字\项目的名字\spiders
创建文件:scrapy genspider 爬虫文件的名字 要爬取的网页(一般不需要http协议)
以爬取百度为例
运行爬虫代码
scrapy crawl 爬虫的名字
import scrapy
class BaiduSpider(scrapy.Spider):
# 爬虫的名字,用于运行爬虫的时候,使用的值
name = "baidu"
# 允许访问的域名
allowed_domains = ["www.baidu.com"]
# 起始的url地址,指的是第一次要访问的域名
# start_urls 是在allowed_domains 前面添加了一个http://
start_urls = ["https://www.baidu.com"]
# 是执行了start_urls之后执行的方法,方法中的response就是返回的那个对象
# 相当于response = urllib.request.urlopen()
# response = requests.get()
def parse(self, response):
print('hello world')
pass
我们在'baidu,py'中输入了一些内容,尝试运行
但是我们并没有发现这其中有我们想要的内容,是因为其中有个robots协议
在这个协议上的公司规定了互相不爬取对方网站,
我们在'settings.py'这个文件中找到了以下内容:
但是我们并不需要遵守这个协议
所以直接注释掉
再次运行就找到了我们输入的内容
scrapy项目基本案例
scrapy项目的结构
1.scrapy项目的结构
项目名称
项目名称
spiders文件夹(存储的是爬虫文件)
init
自定义的爬虫文件 核心功能文件***
init
items 定义数据结构的地方 数据的结构都包含哪些
middlewares 中间件 代理
pipelines 管道 用来处理下载的数据
settings 配置文件 robots协议 UA定义等
2.response的属性和方法
response.text 获取的是响应的字符串
response.body 获取的是二进制数据
response.xpath 可以直接使用xpath方法解析response中的内容
response.extract() 提取seletor对象的data属性值
response.extract_first() 提取seletor列表的第一个数据
# 字符串
content = response.text
# 二进制数据
content = response.body
# xpath解析
span = response.xpath('//*[@id="filter"]/div[1]/a[1]')[0]