Python爬虫Csdn系列I

来源:互联网 发布:如何练好字 知乎 编辑:程序博客网 时间:2024/05/29 04:27

Python爬虫Csdn系列I


By 白熊花田(http://blog.csdn.net/whiterbear)转载需注明出处,谢谢。


说明:

我会在这个系列介绍如何利用python写一个csdn爬虫,并将给定的Csdn用户的博客的所有文章保存起来。嗯,实用性貌似不是很大,写着玩,这个系列后,会有更好玩的更高级的爬虫出现。

原因:

本来想学cookie的,后来发现爬取csdn的文章伪装成浏览器去访问就行了。

本次目标:

爬取csdn某用户的文章列表。这里以我的blog为例,仅仅打开第一列文章列表,不做任何分析,只是验证可以爬取csdn文章。

失败的例子:

# -*- coding:utf-8 -*-import sysimport urllibimport urllib2reload(sys)sys.setdefaultencoding('utf-8')#给定一个csdn的博客专栏链接url = 'http://blog.csdn.net/sodleave'#尝试打开response = urllib2.urlopen(url)html = response.read()print html

结果:



分析:


访问被拒,因为csdn不允许程序直接访问,所以,我们需要将url请求伪装成浏览器访问。使用chrome的审查元素中的Network或者使用其他的抓包工具,在浏览器地址中键入一个csdn地址,比如http://blog.csdn.net/sodleave,回车,此时查看发出去的get请求(使用chrome可以查看Network响应中的第一栏(名字是sodleave,如果你是输入上面的url的话),右键选择Copy request headers)。这个请求的内容如下:

GET /sodleave HTTP/1.1Host: blog.csdn.netConnection: keep-aliveAccept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/42.0.2311.11 Safari/537.36Accept-Encoding: gzip, deflate, sdchAccept-Language: zh-CN,zh;q=0.8,en;q=0.6Cookie: bdshare….

使用上面的User-Agent信息,就可以伪装成浏览器。不要问我为什么这样有这个信息就行,我只知道,csdn一定会根据这个信息判断请求方是否是浏览器。使用urllib2.Request函数将绑定了header的请求发送出去,我们就可以等待响应了。

代码:

# -*- coding:utf-8 -*-import sysimport urllibimport urllib2from bs4 import BeautifulSoupreload(sys)sys.setdefaultencoding('utf-8')#伪装成浏览器,注意headers必须是一个字典headers = {'User-Agent':'Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/31.0.1650.57 Safari/537.36'}#我们指定url并发送请求req = urllib2.Request('http://blog.csdn.net/sodleave', headers=headers)#接着服务端响应来自客户端的请求response = urllib2.urlopen(req) soup = BeautifulSoup(response.read())print soup

结果:



分析:

仅仅是添加了添加了一个头部就可以访问csdn的网页了,那么接下来我们就去获取文章信息吧。

未完待续。





0 0
原创粉丝点击