xpath提取所有节点文本
使用xpath的string(.)
如何解决详情页面元素改变
这个问题是这样产生的,在很多PC站,比如链家,这个页面有这些字段A,但是下个页面这个字段A没了,取而代之的是字段B,在xpath定位时就失效了。这个问题很常见,大体思路是这样的。
文件编写
逻辑文件和解析部分分开写,匹配文件目录是utils/parse/,爬虫文件目录是spiders/
Scrapy 中文乱码
在 setting 文件中设置:FEED_EXPORT_ENCODING = 'utf-8'
Scrapy 使用Mongo
pipelines.py
注意:只有打开和关闭是只执行一次,而写入操作会根据具体的写入次数而定。
Redis 无需关闭
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
.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
好了,今天先写这点,以后再补上。
1:爬取网站美图
爬取图片是最常见的爬虫入门项目,不复杂却能很好地熟悉Python语法、掌握爬虫思路。当然有两个点要注意:一、不要侵犯版权,二、要注意营养。
?思路流程
第一步:获取网址的response,分页内容,解析后提取图集的地址。
第二步:获取网址的response,图集分页,解析后提取图片的下载地址。
第三步:下载图片(也就是获取二进制内容,然后在本地复刻一份)。
?部分代码
?运行结果
2:爬取微博数据
爬虫的最大功能之一就是整合数据,能弄到更全面的信息,真正做好大数据的分析,在这个数据说话的年代,影响是决定性的。(注意别侵权)
?思路流程
1、利用chrome浏览器,获取自己的cookie。
2、获取你要爬取的用户的微博User_id
3、将获得的两项内容填入到weibo.py中,替换代码中的YOUR_USER_ID和#YOUR_COOKIE,运行代码。
?部分代码
用wordcloud等软件生成词云,它会根据信息的频率、权重按比列显示关键字的字体大小。
3:爬取王者荣耀全套皮肤
怎么获取全套皮肤?用钱买,或者用爬虫爬取下来~虽然后者不能穿。这个案例稍微复杂一点,但是一个非常值得学习的项目。
?思路流程
首先进入所有英雄列表,你会看到下图
在这个网页中包含了所有的英雄名称。点击其中一个英雄例如“百里守约”,进去后如下图:
△网址为https://pvp.qq.com/web201605/herodetail/196.shtml
网址中196.shtml以前的字符都是不变的,变化的只是196.shtml。而196是“百里守约”所对应的数字,要想爬取图片就应该进入每个英雄图片所在的网址,而网址的关键就是对应的数字。那么这些数字怎么找呢?
在所有英雄列表中,打开浏览器的开发者工具,刷新,找到一个json格式的文件,如图所示:
这时就会看到所有英雄对应的数字了。在上图所示的Headers中可以找到该json文件对应的网址形式。将其导入Python,把这些数字提取出来,然后模拟出所有英雄的网址即可
?小节代码:
?下载图片
现在可以进入所有英雄的网址并爬取网址下的图片了。进入一个英雄的网址,打开开发者工具,在NetWork下刷新并找到英雄的皮肤图片。如图所示:
然后在Headers中查看该图片的网址。会发现皮肤图片是有规律的。我们可以用这样的方式来模拟图片网址
'http://game.gtimg.cn/images/yxzj/img201606/skin/hero-info/'+str(v)+'/'+str(v)+'-bigskin-'+str(u)+'.jpg',
在该网址中只有str(v)与str(u)是改变的(str( )是Python中的一个函数),str(v)是英雄对应的数字,str(u)只是图片编号,例如第一个图片就是1,第二个就是2,第三个……而一个英雄的皮肤应该不会超过12个(可以将这个值调到20等)。接着就是下载了。
?下载代码:
执行完上面的代码后只需要执行main函数就行了
爬取下来的图片是这样,每个文件夹里面是该英雄对应的图片,如下图:
好了,今天的文章就给大家分享到这里了,希望对正在入门学习Python爬虫或者正在学习Python爬虫的你有所帮助
QQ客服
公众号
手机版
帮助中心