返回信息流最近在看Python爬虫的一些知识
爬虫需要三个步骤,1.抓取 2.处理(最关键的一步) 3.输出
我们去网站抓取东西,一般需要3个东西,URL,DATA,headers
以Python自带库urllib,urllib2来进行举例,其他例如request第三方库请查看其他
URL不说了,都知道
url = 'http://bbs.byr.cn/user/ajax_login.json'
传送DATA
一共有两种方式:GET和POST 这里不说他们为什么不同了,请自行百度
首先用字典封装数据:
data = {
'id':'Penguinbupt',
'passwd':'xxxx'
}
dataencode=urllib.urlencode(data)
而GET加?和内容到URL后面
url2 = url+'?'+ dataencode
headers说明
有些网站禁止人为抓取网站,所以我们要把程序伪装成为浏览器,即请求头有 User-Agent参数
有些网站禁止其他地方盗链,所以我们要把程序加上目的网址主址,即请求头有 Referer参数
还有些网站例如我邮BBS(bbs.byr.cn)要加上Ajax异步请求,即请求头加入 "X-Requested-With":"XMLHttpRequest" 若不懂请看本版 编号为 2034 贴中(http://bbs.byr.cn/#!article/Python/2034) 中的 Mirage0506 大神详细讲解,如果爬我邮论坛一定要加上这条
请求头的构造由Python的dict字典来实现
例如:
headers = {
'Host':'bbs.byr.cn',
'User-Agen':'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:31.0) Gecko/20100101 Firefox/31.0',
'Accept':'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
"X-Requested-With":"XMLHttpRequest"
}
构造HTTP request
request = urllib2.Request(url,dataencode,headers)
发送request
response = urllib2.urlopen(request)
打印response返回的数据
print response.read()
关于代理和timeout,可能自己目前还没用到
使用Debuglog是很好的
需要构造opener
httpHandler = urllib2.HTTPHandler(debuglevel=1)
httpsHandler = urllib2.HTTPSHandler(debuglevel=1)
opener = urllib2.build_opener(httpHandler, httpsHandler)
urllib2.install_opener(opener)
response = opener.open(request)
关于cookie,需要引入cookielib模块
说一下大致流程,先由程序进行请求,服务器应答并传送一个cookie文件,我们将cookie文件保存到本地,当访问其他页面再读取这个cookie即可
关于数据处理有几种方式:
1.正则表达式 (写复杂了还是有点难)
2.content.find(),然后采用切片技术
3.beautifulsoup(第三方的库) HTTPParser
4.xpath css selector 暖神推荐
5.PySpider 由binux推荐
6.Scrapy 一个爬虫框架
爬虫最关键的在于数据的处理
这是一条镜像帖。来源:北邮人论坛 / python / #7349同步于 2015/6/11
该镜像源已超过 30 天没有更新,可能在源站已被删除。
Python机器人发帖
[心得]爬虫初级知识
Penguinbupt
2015/6/11镜像同步13 回复
订阅后,新回复会通过你的通知中心匿名送达。
9 条回复
还有队列管理
【 在 Penguinbupt (会飞的企鹅+意涵团+非凡王者) 的大作中提到: 】
: 最近在看Python爬虫的一些知识
: 爬虫需要三个步骤,1.抓取 2.处理(最关键的一步) 3.输出
: ...................
http 请求四要素,method, path, header, data
- 注意,实际上 http 在发生请求时,url 的 host 部分和 path 部分是分开在 header 和 path 中的
- 其实还有一个要素,version,但是一般没什么卵用
- 所谓的 User-Agent, Referer, Cookie 都是 header 的一部分
【 在 binux 的大作中提到: 】
: http 请求四要素,method, path, header, data
: - 注意,实际上 http 在发生请求时,url 的 host 部分和 path 部分是分开在 header 和 path 中的
: - 其实还有一个要素,version,但是一般没什么卵用
: ...................
说的都很对 method(主要GET POST) path(相对路径) headers(如相对路径要有host,其他按需添加) data(不说了) version都是1.1 http2已出标准但没有广泛用,headers里面不少有用的信息,尤其是server返回来的headers
一个分析程序分析出页面中需要继续爬的链接以后…不用管理的吗?…维护一个链接的队列可以用来做多线程、分布式什么的
【 在 Penguinbupt (会飞的企鹅+意涵团+非凡王者) 的大作中提到: 】
: 还没听说过呀 惭愧 干啥用的?
【 在 dss886 的大作中提到: 】
: 一个分析程序分析出页面中需要继续爬的链接以后…不用管理的吗?…维护一个链接的队列可以用来做多线程、分布式什么的
thanks 学习了 在电信实习呢?