这是崔斯特的第三十八篇原创文章
长期更新 (๑• . •๑)
平时有个习惯,会把自己的笔记写在有道云里面,现在做个整理。会长期更新,因为我是BUG制造机。
解析
xpath提取所有节点文本
|
|
使用xpath的string(.)
|
|
如何解决详情页面元素改变
这个问题是这样产生的,在很多PC站,比如链家,这个页面有这些字段A,但是下个页面这个字段A没了,取而代之的是字段B,在xpath定位时就失效了。这个问题很常见,大体思路是这样的。
- 创建一个包含所有字段的dict:
data = {}.fromkeys(('url', 'price', 'address'))
- 然后根据网页中是否有字段来取值,例如,有’url’就取对应的value,没有则为空
- 这样就可以完美解决匹配不全问题
Scrapy 相关
文件编写
逻辑文件和解析部分分开写,匹配文件目录是utils/parse/
,爬虫文件目录是spiders/
Scrapy 中文乱码
在 setting
文件中设置:FEED_EXPORT_ENCODING = 'utf-8'
Scrapy 使用Mongo
pipelines.py
- 首先我们要从settings文件中读取数据的地址、端口、数据库名称。
- 拿到数据库的基本信息后进行连接。
- 将数据写入数据库(update制定唯一键)
- 关闭数据库
注意:只有打开和关闭是只执行一次,而写入操作会根据具体的写入次数而定。
Redis 无需关闭
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758 import pymongoclass MongoDBPipeline(object):"""1、连接数据库操作"""def __init__(self,mongourl,mongoport,mongodb):'''初始化mongodb数据的url、端口号、数据库名称:param mongourl::param mongoport::param mongodb:'''self.mongourl = mongourlself.mongoport = mongoportself.mongodb = mongodbdef from_crawler(cls,crawler):"""1、读取settings里面的mongodb数据的url、port、DB。:param crawler::return:"""return cls(mongourl = crawler.settings.get("MONGO_URL"),mongoport = crawler.settings.get("MONGO_PORT"),mongodb = crawler.settings.get("MONGO_DB"))def open_spider(self,spider):'''1、连接mongodb数据:param spider::return:'''self.client = pymongo.MongoClient(self.mongourl,self.mongoport)self.db = self.client[self.mongodb]def process_item(self,item,spider):'''1、将数据写入数据库:param item::param spider::return:'''name = item.__class__.__name__# self.db[name].insert(dict(item))self.db['user'].update({'url_token':item['url_token']},{'$set':item},True)return itemdef close_spider(self,spider):'''1、关闭数据库连接:param spider::return:'''self.client.close()
scrapy图片下载
|
|
scrapy 暂停爬虫
scrapy crawl somespider -s JOBDIR=crawls/somespider-1
scrapy_redis 分布式
使用队列与去重即可完成分布式需求,需要注意的是 Redis 格式,默认采用的是 list
, 可以在 settings.py
文件中设置 REDIS_START_URLS_AS_SET = True
,使用 Redis
的 set
类型(去重种子链接)
安装
超时问题
自定义超时时间
sudo pip3 --default-timeout=100 install -U scrapy
或者 使用其他源
sudo pip3 install scrapy -i https://pypi.tuna.tsinghua.edu.cn/simple
权限问题
安装某模块时,报错:PermissionError: [WinError 5] 拒绝访问。: 'c:\\program files\\python35\\Lib\\sit
e-packages\\lxml'
最简单方法:pip install --user lxml
Pycharm 相关
.gitignore 文件
安装插件: Preferences > Plugins > Browse repositories... > Search for ".ignore" > Install Plugin
然后就可以很方便的添加到 .gitignore
显示函数
点击 Show Members
,查看目录,会显示相应的类和函数
激活码
数据
Mongo导出命令
λ mongoexport -d test -c set --type=csv -f name,age -o set.csv
λ mongoexport -h 10.10.10.11 -d test -c test --type=csv -f url,id,title -o data.csv
其他
requirements.txt 文件
小提示:使用 pigar 可以一键生成 requirements.txt 文件
Installation:pip install pigar
Usage:pigar
好了,今天先写这点,以后再补上。