python3爬虫爬取网页思路及常见问题(原创)
学习爬虫有一段时间了,对遇到的一些问题进行一下总结。
爬虫流程可大致分为:请求网页(request),获取响应(response),解析(parse),保存(save)。
下面分别说下这几个过程中可以出现的问题:
一、请求网页:向网站服务器发送请求
你可以这样理解,你在浏览器输入xxjpg.com,告诉这个网站,我想看你的内容,然后网站服务器收到这个请求后,会分析这个请求是否是允许的,如果是,则返回内容给你的浏览器,以源码形式呈现。
可能存在的问题:
网络请求不成功
分析:
a.本地网络不稳定
b.网站本身服务器问题(维护,升级balabala...)
c.被封IP啦
针对网络请求可能出现的问题,建议都进行异常处理。因为俗话说的好,网络连接有风险,异常处理很重要。针对网络不好的情况,建议设置timeout。
被封IP的问题,建议使用IP代理池。免费的网上也有,不过稳定性不是很好,可以用来个人学习。如果爬取数据是商用,建议使用收费的。
二、获取网页响应
发送请求成功,服务器也正常得到了响应,我们就可以看下得到的源码了。
可能存在的问题:
1.无法正常显示中文或乱码
分析:编码的问题
修改编码encoding=‘utf-8’可以解决问题。当然,如果你用pycharm之类的IDE,如果IDE内没有正确设置encoding,同样会出现无 法显示中文的问题,不过这时候你就不单单是爬虫爬取网页不显示中文的问题,你所有运行的程序输出都不能正常显示中文。
2.返回的源代码为空
分析:
a. 网站请求失败了(参见本文第一个过程)
b. 网站采取了反爬虫手段(大部分是这个原因)
一些常见的网站反爬措施包括审查请求头,我遇到较多的是审查User-Agent(确定是否是浏览器的行为),Referer(防止图片盗链)的,最郁闷的一次是刚开始学爬虫的时候下载了几百张叮当猫(擦....)。这两种解决方法比较简单,在请求头中伪装一下就好。
有一些网站,如果爬虫爬取速度过快,会封IP。建议使用IP代理池,限制爬取速度。另外还有一些网站会对cookie进行审查,如果不需要登录就能爬取的网站,考虑禁止cookie。当然,还有些网站复杂点的,要求登录验证,可以采取多个账号登录,形成一个cookie池。不过值得注意的是,cookie都是有期限的。
还有一种网站会用的反爬手段,就是验证码。简单的字符识别,考虑用ocr。滑动验证,考虑用selenium模拟人的动作。再复杂点的验证,真正的人都很难看清的那种。作为一个python爬虫,是不应该怕这个的,迎难而上,解决这种验证码的方法,就是,就是,求助人工打码平台(捂头。。别打脸)。当然,有人会说了,这个复杂的验证码问题自己都不能解决,太水了。其实,万物都有两面性,简单的验证码,用户体验会更好,但是安全性相对来说差一些。复杂的验证码,就正好相反了。你是不是曾经有过这样的经历,看个网站让输验证码,输来输去都是错的,让人想砸键盘。所以说,万事无绝对,爬虫也是如此。
当然,对于爬取难度很高的网页,还有其他的迂回路线。比如,你这个www的网站真鸡儿难爬,我就找找m站啊,wap站啊。或者有没有PC端啊,或者app啊,说不定更简单呢。
三、解析
很重要的一个阶段,我们最终需要的数据都需要从这里面产生,什么文本啦,图片啦,音频啦...等等。
可能存在的问题:解析出来的内容为空
a.童鞋,你确定你正则表达式写对了么,我这里正则表达式18式,500块一本要不要
b.妹纸,你确定css选择器写对了么,我这里有css速成指南,免费送你要不要。。诶,别走啊
c.骚年,你确定xpath写对了么,我这里。。
。。。好了,开个玩笑,其实这些东西写错是很正常的,特别是在网页dom超级恶心复杂的时候,多尝试就好。
如果确定表达式写的没问题,那么可能是响应(response)的问题。
n.获取到网页源代码并没有包含需要提取的元素,网页是js动态加载的,而这些数据在动态加载的过程中生成
举个例子,刷微博的时候,看到某一条微博评论数上千,但是点进去查看评论只有几十条。把评论拉到最下面,过几秒,又加载了一部分出来。这就是一个动态加载的过程。针对这种情况在请求网页的时候加上响应的参数即可。可以使用chrome浏览器F12来查看参数,也可以使用firefox的firebug插件来查看。对于参数加密的,可以考虑强行破解或者selenium模拟的方式来突破。
四、保存
将解析出来的结构化数据存储到本地磁盘或者数据库。
可能存在的问题:各种异常
分析:主要涉及的是各种IO操作,包括文件读写和数据库操作,可能出现的问题也来自于这些。做好异常处理,再有问题,google。
好了,本次基本总结就到这里。不过这都是粗略的思路。具体实现限于篇幅也没法具体展开。以后有机会再具体补充。
原创文章,转载请注明出处,谢谢!
2018-06-15
python3爬虫爬取网页思路及常见问题(原创)的更多相关文章
- Python3爬虫----爬取网页内的图片
无聊把公司内网爬了一遍. https://github.com/gig886/Python/tree/master/爬虫
- node:爬虫爬取网页图片
代码地址如下:http://www.demodashi.com/demo/13845.html 前言 周末自己在家闲着没事,刷着微信,玩着手机,发现自己的微信头像该换了,就去网上找了一下头像,看着图片 ...
- erlang 爬虫——爬取网页图片
说起爬虫,大家第一印象就是想到了python来做爬虫.其实,服务端语言好些都可以来实现这个东东. 在我们日常上网浏览网页的时候,经常会看到一些好看的图片,我们就希望把这些图片保存下载,或者用户用来做桌 ...
- 【Python】python3 正则爬取网页输出中文乱码解决
爬取网页时候print输出的时候有中文输出乱码 例如: \\xe4\\xb8\\xad\\xe5\\x8d\\x8e\\xe4\\xb9\\xa6\\xe5\\xb1\\x80 #爬取https:// ...
- python3爬虫爬取猫眼电影TOP100(含详细爬取思路)
待爬取的网页地址为https://maoyan.com/board/4,本次以requests.BeautifulSoup css selector为路线进行爬取,最终目的是把影片排名.图片.名称.演 ...
- python3 爬虫---爬取糗事百科
这次爬取的网站是糗事百科,网址是:http://www.qiushibaike.com/hot/page/1 分析网址,参数''指的是页数,第二页就是'/page/2',以此类推... 一.分析网页 ...
- python3 爬虫---爬取豆瓣电影TOP250
第一次爬取的网站就是豆瓣电影 Top 250,网址是:https://movie.douban.com/top250?start=0&filter= 分析网址'?'符号后的参数,第一个参数's ...
- python3 爬虫爬取深圳公租房轮候库(深圳房网)
深圳公租房轮候库已经朝着几十万人的规模前进了,这是截至16年10月之前的数据了,贴上来大家体会下 所以17年已更新妥妥的10W+ 今天就拿这个作为爬虫的练手项目 1.环境准备: 操作系统:win10 ...
- python3爬虫-爬取58同城上所有城市的租房信息
from fake_useragent import UserAgent from lxml import etree import requests, os import time, re, dat ...
随机推荐
- LeetCode--Remove Linked List Element
Remove all elements from a linked list of integers that have value val. ExampleGiven: 1 --> 2 --& ...
- [BZOJ5417] [NOI2018]你的名字
Description 小A 被选为了ION2018 的出题人,他精心准备了一道质量十分高的题目,且已经把除了题目命名以外的工作都做好了. 由于ION 已经举办了很多届,所以在题目命名上也是有规定的, ...
- [NOIP2018 TG D2T2]填数游戏
题目大意:$NOIP2018\;TG\;D2T2$ 题解:在skip2004的博客基础上修改的,也是暴搜. 说明一下把vector改成数组并不可以通过此题,记录. 结论:在$m>n+1$时答案为 ...
- [洛谷P1536]村村通
题意:多组数据,当n为0时结束,每组数据表示有n个村子,m条路,求还需要建多少条路,使得所有的村子联通题解:用并查集求出有多少个联通块,然后求解 C++ Code: #include<cstdi ...
- [洛谷P2147][SDOI2008]洞穴勘测
题目大意:有$n$个洞穴,$m$条指令,指令有三种 $Connect\;u\;v$:在$u,v$之间连一条边 $Destroy\;u\;v$:切断$u,v$之间的边 $Query\;u\;v$:询问$ ...
- hadoop基础----hadoop实战(九)-----hadoop管理工具---CDH的错误排查(持续更新)
在CDH安装完成后或者CDH使用过程中经常会有错误或者警报,需要我们去解决,积累如下: 解决红色警报 时钟偏差 这是因为我们的NTP服务不起作用导致的,几台机子之间有几秒钟的时间偏差. 这种情况下一是 ...
- 微信小程序使用原生WebSokcet实现断线重连及数据拼接
以前做小程序为了应急找了个插件去链接WebSokcet,文章传送门. 回过头在新项目中再次使用时出现了些许问题,不一一赘述.遂决定好好用一下原生的WebSokcet. 一.说明 1.小程序原生的Web ...
- 深入浅出JavaScript变量作用域
在学习JavaScript的变量作用域之前,我们应当明确几点: JavaScript的变量作用域是基于其特有的作用域链的. JavaScript没有块级作用域. 函数中声明的变量在整个函数中都有定义. ...
- [poj 3261]后缀数组+滑窗最小值
题目链接:http://poj.org/problem?id=3261 这个是可以交叉的重复串,所以用height就可以了,但是题目说让重复k次以上,也就是直接做一个k-1长度的滑窗最小值,从这些最小 ...
- POJ2559 Largest Rectangle in a Histogram (单调栈
Largest Rectangle in a Histogram Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 26012 ...