Python爬虫Csdn系列I

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

Python爬虫Csdn系列I的相关文章

Python爬虫Csdn系列III

Python爬虫Csdn系列III By 白熊花田(http://blog.csdn.net/whiterbear) 转载需注明出处,谢谢. 说明: 在上一篇博客中,我们已经能够获取一个用户所有文章的链接了,那么这一节自然就是要将这些博客下载下来咯. 分析: 有了链接下载文章自然是不难.但是,获取的数据该怎么处理?每一篇文章都带有格式换行这些信息,自然,我们存储它们也是要存储其对应的html格式的数据的(注意,我们编辑的带有格式的博客或者其他文本都是以html代码格式存储的).如何存?使用数据库

Python爬虫Csdn系列II

Python爬虫Csdn系列II By 白熊花田(http://blog.csdn.net/whiterbear) 转载需注明出处,谢谢. 说明: 在上一篇文章中,我们已经知道了只要将程序伪装成浏览器就能访问csdn网页.在这篇文章中,我们将设法获取某个csdn用户的所有文章的链接. 分析: 打开一个某一个的csdn用户的的专栏,可以选择目录视图(如:http://blog.csdn.net/whiterbear?viewmode=contents)和摘要视图(比如:http://blog.cs

python爬虫Pragmatic系列III

python爬虫Pragmatic系列III 说明: 在上一篇博客中,我们已经学会了从赶集网上的一家公司中提取出有关的信息,并存储到Excel中. 本次目标: 在本节中,我们将批量下载赶集首页上所有的公司界面(注意不是赶集网上所有的公司页面,我们可以把这个留给之后的任务),并批量的处理所有公司的有关信息,并保存到Excel中. 注意: 在上一篇博客中,我们使用的只是匹配赶集网上其中一家公司界面的中信息,而且不幸的是,很多的其他的公司的联系店主模块中的信息数量并不是固定的,即有的是10个li,而有

Python爬虫学习系列教程

Python爬虫学习系列教程 大家好哈,我呢最近在学习Python爬虫,感觉非常有意思,真的让生活可以方便很多.学习过程中我把一些学习的笔记总结下来,还记录了一些自己实际写的一些小爬虫,在这里跟大家一同分享,希望对Python爬虫感兴趣的童鞋有帮助,如果有机会期待与大家的交流. Python版本:2.7 一.爬虫入门 1. Python爬虫入门一之综述 2. Python爬虫入门二之爬虫基础了解 3. Python爬虫入门三之Urllib库的基本使用 4. Python爬虫入门四之Urllib库

python爬虫CSDN文章抓取

CSDN原则上不让非人浏览访问,正常爬虫无法从这里爬取文章,需要进行模拟人为浏览器访问. 使用:输入带文章的CSDN链接自动生成正文的HTML,文件名为标题名 #!/usr/bin/env python # coding=utf-8 ######################################### #> File Name: CSDN_article.py #> Author: nealgavin #> Mail: [email protected] #> Cre

python爬虫Pragmatic系列IV

python爬虫Pragmatic系列IV 说明: 在上一篇博客中,我们已经做到了从赶集网上单个首页中抓取所有的链接,并下载下来,分析后存入Excel中. 本次目标: 在本节中,我们将使用python多线程技术从赶集网上抓取链接并分析,注意,我们这次能够抓获的链接数目可以远远大于上一篇博客中抓获的. 分析: 用爬虫统计信息那自然数据越多越好,为了获取更多的数据,我们先研究下如何打开上千个赶集网上公司链接. 打开首页(http://bj.ganji.com/danbaobaoxian/o1/),在

《Python爬虫学习系列教程》学习笔记

转自:http://cuiqingcai.com/1052.html 大家好哈,我呢最近在学习Python爬虫,感觉非常有意思,真的让生活可以方便很多.学习过程中我把一些学习的笔记总结下来,还记录了一些自己实际写的一些小爬虫,在这里跟大家一同分享,希望对Python爬虫感兴趣的童鞋有帮助,如果有机会期待与大家的交流. 一.Python入门 1. Python爬虫入门一之综述 2. Python爬虫入门二之爬虫基础了解 3. Python爬虫入门三之Urllib库的基本使用 4. Python爬虫

Python爬虫开发系列之一》开发IDE安装

中国有句古话说:工欲善其事,必先利其器! 在我最开始学 Python 的时候,因为没有去探索好用的工具,吃了很多苦头.磕磕绊绊走过来之后才知道,好的工具给效率带来的提升不是从 1 到 1.1 倍速,而是从 1 到 10 倍速. 所以说编写和运行程序之前我们必须要先把开发环境配置好,只有配置好了环境并且有了更方便的开发工具我们才能更加高效地用程序实现相应的功能达到事半工倍的效果,然而很多情况下我们可能在最开始就卡在环境配置上,如果这个过程花费了太多时间,想必学习的兴趣就下降了大半,所以本章专门开发

Python爬虫开发系列之三》Requests请求库的使用

Requests是一个实用.简单.强大的Python HTTP客户端库,编写爬虫和测试服务器响应数据时经常会用到.Requests 能够完全满足如今网络的需求.接下来我们从最基本的get post 请求开始 到高级特性一步一个脚印去学习.学习是个渐进的过程,只有脚踏实地不断的去练习才能掌握这些重要的知识点. 一.发送请求 get /post 按照规例首先要导入Requests模块>>> import requests r=requests.get('https://www.baidu.c