python爬虫
资料:
1.小白进阶之Scrapy第一篇
https://cuiqingcai.com/3472.html
2.Scrapy入门教程
http://scrapy-chs.readthedocs.io/zh_CN/0.24/intro/tutorial.html#id2
3.B站 --Python网络爬虫实战 Scrapy
https://www.bilibili.com/video/av7635196/?p=5
4.scrapy-redis介绍(一)
https://blog.csdn.net/hjhmpl123/article/details/53292602
安装:
略,在python找
快捷键
Ctrl+Shift+d肆
过程:
1.scrapy项目创建
scrapy startproject XXXXX XXXXX代表你项目的名字
结构:
scrapy.cfg: 项目的配置文件
xxxx/: 该项目的python模块。之后您将在此加入代码。
xxxx/items.py: 项目中的item文件.
xxxx/pipelines.py: 项目中的pipelines文件.
xxxx/settings.py: 项目的设置文件.
xxxx/spiders/: 放置spider代码的目录.
2.scrapy shell #参考: https://segmentfault.com/a/1190000013199636?utm_source=tag-newest
# https://www.cnblogs.com/zhaof/p/7189860.html
在shell使用选择器,便于获取xpath,可以配合网页路径
scrapy shell "http://www.itcast.cn/channel/teacher.shtml"
3.Feed exports:
最简单存储爬取的数据的方式是使用
scrapy crawl dmoz -o items.json
该命令将采用 JSON 格式对爬取的数据进行序列化,生成 items.json 文件。
4.通用爬虫(Broad Crawls)
5.获取标签下多层结构所有文本 #参考: https://blog.csdn.net/zhengxiangwen/article/details/73865267
response.xpath('//div[@class="post-full-text contents"]//text()').extract()
scrapy执行流程
...
基类scrapy.Spider介绍
属性:
name: #要求唯一
allowed_domains: #允许域名
start_urls:
custom_settings:个性化设置,会覆盖全局的设置
crawler:抓取器,spider将绑定到上面
settings:配置实例,包含工程中所有的配置变量
logger:日志实例
方法:
from_crawler :类方法,创建spider
start_requests():生成初始requests
make_requests_from_url(url):根据url生成一个request
parse(requests):解析网页内容
log(message[,level,component]):记录日志,
self.logger.info("visited success")
closed(reason):当spider关闭时候跳跃的方法
子类:
CrawlSpider:最常见的spider,用来抓取普通网页
比起基类增加2个成员,
rules:定义了抓取规则--连接怎么跟踪,使用哪一个parse函数解析此连接
parse_start_url(response):解析初始url的相应
XMLFeedSpider: #下面的类不写了,放不进嘴里,根本不用嚼
...
request参数: #https://www.cnblogs.com/thunderLL/p/6551641.html
callback:回调
url: #在这里卡住了,因为要的是str,我传入的是队列
meta(dict):指定Request.meta属性的初始值。
method(string):HTTP请求的方法,默认为GET
命令:
scrapy startproject XXXXX #创建项目
scrapy crawl csdn -o items.json #执行存储json数据
选择器:
response.xpath('//ol/li').xpath('@data-item-id').extract()[0]
response.xpath('//article/h1/text()').extract()[0]
response.css('p.TweetTextSize.TweetTextSize--normal.js-tweet-text.tweet-text::text').extract()
response.xpath('//ol/li').css('p.TweetTextSize.TweetTextSize--normal.js-tweet-text.tweet-text *::text').extract()
scrapy_redis 分布式抓取
问题:
1.在windows环境,运行项目出现 ModuleNotFoundError: No module named 'win32api' 错误
#https://blog.csdn.net/little_sow/article/details/46408931
原因:少pywin32库, 下载安装正常
命令语句:
保存到文件
filename = response.url.split("/")[-2]
with open(filename, 'wb') as f:
f.write(response.body)