Python爬虫Csdn系列I
By 白熊花田(http://blog.csdn.net/whiterbear)
说明:
我会在这个系列介绍如何利用python写一个csdn爬虫,并将给定的Csdn用户的博客的所有文章保存起来。嗯,实用性貌似不是很大,写着玩,这个系列后,会有更好玩的更高级的爬虫出现。
原因:
本来想学cookie的,后来发现爬取csdn的文章伪装成浏览器去访问就行了。
本次目标:
爬取csdn某用户的文章列表。这里以我的blog为例,仅仅打开第一列文章列表,不做任何分析,只是验证可以爬取csdn文章。
失败的例子:
# -*- coding:utf-8 -*- import sys import urllib import urllib2 reload(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.1 Host: blog.csdn.net Connection: keep-alive Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8 User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/42.0.2311.11 Safari/537.36 Accept-Encoding: gzip, deflate, sdch Accept-Language: zh-CN,zh;q=0.8,en;q=0.6 Cookie: bdshare….
使用上面的User-Agent信息,就可以伪装成浏览器。不要问我为什么这样有这个信息就行,我只知道,csdn一定会根据这个信息判断请求方是否是浏览器。使用urllib2.Request函数将绑定了header的请求发送出去,我们就可以等待响应了。
代码:
# -*- coding:utf-8 -*- import sys import urllib import urllib2 from bs4 import BeautifulSoup reload(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的网页了,那么接下来我们就去获取文章信息吧。
未完待续。
时间: 2024-10-05 04:19:11