Scrapy知识点总结(1)
一.最基础最常见操作
A:无深度的简单爬取(url有规律型)
1:创建项目
(xx代表随机,根据项目而定,下面的所有xx都不一定是相同的)
scrapy start project XX
cd XX
scrapy genspider xx xx.com
2: 进入spiders\xx,进行对XXSpider略微修改
XXSpider类中的变量含义
| 名称 | 含义 |
|---|---|
| name | 该爬虫项目的名称,类型str |
| start_urls | 需要爬取得链接,类型list |
| allowed_domains | 只允许list中的域名通行 |
XXSpider类中的方法含义
| 名称 | 含义 |
|---|---|
| parse | Request类爬取返回的结果 |
parse函数的第二个参数response最常用的几个方法
| 名称 | 含义 |
|---|---|
| text | 返回一个字符串类型的body(基于python3,python2返回的是unicode) |
| css | 返回的是Selector(text) |
| xpath | 返回的是Selector(text) |
至于如何略微修改
如果在A.1创建项目符合标准的话,那么类成员name和allowed_domains是无需修改的。 只需要对start_urls进行改动。
Q:如何改?
A:我们需要爬取xx.com用户ID从1-50000的用户信息。其链接是有规律的。 https://bbs.xx.com/userInfo/{id} , 那么我们其实就可以通过列表生成器来生成这个start_urls
start_urls = ['https://bbs.xx.com/userInfo/{id}'.format(id=i) for i in range(1,51)]
Q:到了parse函数,如何改?
A:这就使用上面介绍的parse函数的第二个参数response最常用的几个方法中有三个response.text|css|xpath其中之一进行修改就好。根据需求拿到需要的数据。
这边parse的修改暂时告一段落, 因为到后面还要回来改。
3:修改items.py文件
这边就比较简单了,直接修改CrawlItem,类有一个参数。item 类型是dict(跟进源码3层可知)。
比如我们此时需要id,name,tel三个字段。代码就可以如下图所示:
(默认的Item可能是scrapy.Item,Field同理。自己修改下导包形式就好了。从import scrapy.Item和import scrapy.Field -> from scrapy import Item,Field)
class XXItem(Item):
# define the fields for your item here like:
id = Field()
name = Field()
tel = Field()
pass
4:回头修改XXSpider的parse
我们爬取了数据,那么必须是要使用的。 所以呢,我们上面的items.py文件其实就是为我们这个进行一个准备。 已知我们需要id,name,tel.此时我们导入items.py的XXItem类 方式:from ..items import XXItem.
于是就可以写出下面的代码,至于关键信息的处理方式,依然看实际情况及个人喜好而定。无是非对错!
html = response.body.decode('utf-8')
pattern = re.compile('<a href="http://bbs.xiaomi.cn/t-(\d+)" class=\'title_name \' target="_blank" rel="noopener noreferrer">(.*?)</a>.*?target="_blank" rel="noopener noreferrer">(.*?)</a>',re.S)
for item in re.findall(pattern,html):
print(item)
it = CrawlItem()
it['id'] = item[0]
it['title'] = item[1]
it['author'] = item[2]
yield it
此时我们上面的it会传到pipelines文件中的XXPipeline类的process_item方法。
5.存储文件
在第四点说到了it的内容会传到XXPipeline类的process_item方法。那么我们只需要对process_item文件进行文件读写/数据库操作等你认为有意义的操作即可。
此时务必不要忘记了,在setting.py文件中的ITEM_PIPELINES取消注释。该步骤忘记了会导致无法存储数据。
ITEM_PIPELINES = {
'XX.pipelines.XXPipeline': 300,
}
这里丢上一张scrapy框架流程图,官方文档最新的
_PIPELINES = {
‘XX.pipelines.XXPipeline’: 300,
}
这里丢上一张scrapy框架流程图,官方文档最新的

本文详细介绍Scrapy爬虫的基础操作,包括项目创建、URL规律爬取、数据解析与存储等核心步骤,适合初学者快速入门。
65万+

被折叠的 条评论
为什么被折叠?



