【Python开发】网页爬取心得
来源:互联网 发布:异次元杀阵2解析知乎 编辑:程序博客网 时间:2024/05/09 08:47
转载:python 爬虫抓取心得分享
title:python 爬虫抓取心得分享
0x1.urllib.quote('要编码的字符串')如果你要在url请求里面放入中文,对相应的中文进行编码的话,可以用:
urllib.quote('要编码的字符串')
query = urllib.quote(singername) url = 'http://music.baidu.com/search?key='+query response = urllib.urlopen(url) text = response.read()0x2. get or post urlencode
如果在GET需要一些参数的话,那我们需要对传入的参数进行编码。
0x3.urllib urllib2 proxy 代理
如果你请求对方的网页,确不想被封IP的话,这个时候就要用到代理了,其实用urllib代理还是比较简单的:
只用一个代理IP的话 有时候弄巧成拙了 恰好被大众点评给检测出来了
401
211.167.112.14
python-urllib/1.17
那么就试试多个IP代理
这回没问题了。
有的时候要模拟浏览器 ,不然做过反爬虫的网站会知道你是robot
例如针对浏览器的限制我们可以设置User-Agent头部,针对防盗链限制,我们可以设置Referer头部
有的网站用了Cookie来限制,主要是涉及到登录和限流,这时候没有什么通用的方法,只能看能否做自动登录或者分析Cookie的问题了。
仅仅是模拟浏览器访问依然是不行的,如果爬取频率过高依然会令人怀疑,那么就需要用到上面的代理设置了就算设置了代理,代理的ip也有可能被封,还有另外一种终极的办法来防止被封,那便是使用time库的sleep()函数。
直接抓http://www.dianping.com的话会location到城市列表去 反而达不到效果
header: Location: /citylist
Proxy的使用相当广泛,对于单个应用来说,爬虫是很容易被封禁,如果使用Proxy模式,就能降低被封的风险,所以有需求的同学需要仔细看下Python urllib2对于Proxy的使用:
0x4.抓取下拉加载或者点击加载的页面方法:
加载中的内容应该是ajax请求的,对付ajax请求没有什么好的办法,只有抓取页面的JS,分析JS进行抓取
解决方案:
1.傻傻的全部下拉完 全部点击加载完(对少量数据还行,大量数据的站去死吧) 在Firefox里面copy出源码信息 进
行正则匹配
2.HttpFox抓包 直接抓ajax地址的数据 分析ajax链接 变换参数 取得json后再正则
可以参考我的:
Python抓取花瓣网图片脚本
python抓取bing主页背景图片
0x5.正则处理
python对正则表达式的支持模块。如果http库有选择的余地外,re几乎是没有选择余地的工具。因为有正则表达式的存在,所以让我们可以很灵活的去抠取抓取过来的完整html中所需要的部分。
当然,这篇文章不会详细解释正则表达式,因为如果要系统的介绍正则表达式,或许可以写一本书了。这里只简单提一下我们后面会用到的python正则表达式的用法。
re.compile()。如果正则表达式比较多,请一 定要先用这个方法先行编译正则表达式,之后再正则表达式的使用就会很非常快,因为大家都知道,python文件在第一次运行会分别创建一个字节码文件,如 果正则表达式作为字符串的时候,在运行时才会被编译,是会影响到python的执行速度的。
compile()返回的是一个re对象,该对象拥有re库的search(), match(), findall()等方法,这三个方法,在后面会被频繁的用到,生成被编译的re对象还有一个好处是调用方法不用再传入字符串的正则表达式。
search()主要用来校验正则表达式能否匹配字符串中的一段,通常用来判断该页面是否有我需要的内容。
match()用来判断字符串是否完全被一个正则表达式匹配,后面用的比较少。
findall()用来搜索正则表达式在字符串中的所有匹配,并返回一个列表,如果没有任何匹配,则返回一个空列表。
带有子组的正则表达式,findall()返回的列表中的每个元素为一个元组,正则表达式中有几个子组,元组中就会有几个元素,第一个元素为第一个括号中的子组匹配到的元素,以此类推。
findall()和search()是有类似之处的,都是搜索正则表达式在字符串中的匹配,但是findall()返回一个列表,search()返回一个匹配对象,而且findall()返回的列表中有所有匹配,而search()只返回第一个匹配的匹配对象。
0x6.Reference:
- 【Python开发】网页爬取心得
- python爬取网页
- Python 网页爬取
- python 爬取网页正文
- python 多线程网页爬取
- python爬取网页信息
- python爬取网页图片
- 学习python爬取网页
- Python爬取简单网页
- python爬取网页内容
- python爬取网页图片
- Python爬取网页数据
- Python爬取网页图片
- Python爬取网页图片
- python爬取HTML网页
- Python-爬取网页信息
- python爬取网页信息
- Python 爬取网页图片
- 使用java开源工具jsoup抓取解析网页数据
- Android学习之路---点击事件的分发测试
- PAT 1086. Tree Traversals Again (25)(依据中序遍历的非递归形式用到的堆的状态,来构造树并输出后序遍历)
- 求Sn=a+aa+aaa+aaaa+aaaaa+....的前n项之和,其中a是一个数字,例如:2+22+222+2222+22222+.....
- 各个JSON技术的简介和优劣
- 【Python开发】网页爬取心得
- ViewFlipper多页面管理的控件
- HDU 5036 Explosion 概率 期望
- ViewPager页卡
- Vector和ArrayList的简单比较
- linux shell中单引号、双引号、反引号、反斜杠的区别
- android 通过wifi 热点实现手机摄像头数据共享
- Bean和Spring生命周期的区别
- HTTP Header 详解