前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >python使用urllib2抓取防爬取链接

python使用urllib2抓取防爬取链接

作者头像
the5fire
发布2019-02-28 16:25:06
8050
发布2019-02-28 16:25:06
举报
文章被收录于专栏:Python程序员杂谈

写了那么多篇找工作的文章,再写几篇就完了,也算是对自己一段时间的一个总结。近来发现自己博客上python技术点的文章有点少,为了防止自己总是遗忘,还是写出来的好。

前几天刚看完《Linux/Unix设计思想》,真是一本不错的书,推荐想提高自己代码质量的童鞋看一下,里面经常提到要以小为美,一个程序做好一件事,短小精悍,因此我也按照这种思想来写python技术点的文章,每个点都是一个函数,可以直接拿来用。

开始了

一般情况下用python的童鞋是不可避免的要写一些爬虫程序的,因此对python中urllib和urllib2都比较熟悉。而最基本的爬取方法就是:

代码语言:javascript
复制
urllib.urlopen(url).read()

大多数网站都不会禁止这样的爬取,但是有些网站都设定了禁止爬虫爬取,当然这样一方面是为了保护内容的版权,另一方面也是为了方式过多的爬虫造成网站流量的白白浪费。恶意爬取某一网站的内容当然是不道德的行为了,这里只讨论技术。

下面的函数通过urllib2来模拟浏览器访问链接爬取内容:

代码语言:javascript
复制
def get_url_content(url):
    i_headers = {"User-Agent": "Mozilla/5.0 (Windows; U; Windows NT 5.1; zh-CN; rv:1.9.1) Gecko/20090624 Firefox/3.5",\
                 "Referer": 'http://www.baidu.com'}
    req = urllib2.Request(url, headers=i_headers)

    return urllib2.urlopen(req).read()

仅仅是模拟浏览器访问依然是不行的,如果爬取频率过高依然会令人怀疑,那么就需要用到urllib2中的代理设置了,如下:

代码语言:javascript
复制
def get_content_by_proxy(url, proxy):
    opener = urllib2.build_opener(urllib2.ProxyHandler({'http':proxy}), urllib2.HTTPHandler(debuglevel=1))
    urllib2.install_opener(opener)

    i_headers = {"User-Agent": "Mozilla/5.0 (Windows; U; Windows NT 5.1; zh-CN; rv:1.9.1) Gecko/20090624 Firefox/3.5", \
					"Referer": 'http://www.baidu.com'}

    req = urllib2.Request(url, headers=i_headers)
    content = urllib2.urlopen(req).read()
    return content

要使用这个函数,当然你得找一些代理服务器了,这些资源网上有很多,关键字:http代理

关于网页抓取的方法其实还有其他的方法,技术是很灵活的东西,就看你怎么用。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2012-09-10 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档