python爬虫学习笔记day-2

小白发文。

python爬虫学习笔记day-2

最后面有,爬取贴吧HTML页面内容的案例。

- 浏览器史:

- Mosaic 世界第一款浏览器美国计算机应用中心:

- Netscape 网景:Netscape(支持框架)

- Microsoft 微软:Internet Explorer(也支持框架)

- 第一次浏览器大战:网景公司失败消亡。。。

- Mozilla 基金组织:Firefox 火狐出现(Gecko内核)

- User-Agent决定用户的浏览器,为了获得更好的响应页面的Html

- IE就是披着个Mozilla的外皮,接下来各大浏览器争相模仿。

-

python爬虫学习笔记day-2

##urllib2库的基本使用

- 所谓的网页抓取,就是把url地址中的指定网络资源从网络流中读取出来,保存包本地或者数据库中。在python中有很多库可以用来抓取网页,首先介绍urllib2.

- urllib2是python2.7自带的模块(不需要下载,导入即用)

- URLlib2 官方文档:https://docs.python.org/2/library/urllib2.html

- urllib2 源码:https://hg.python.org/cpython/file/2.7/Lib/urllib2.py

- urllib2 在python3.x中修改为urllib.request

###demo

# -*- coding: utf-8 -*-

import urllib2

# 向指定的url地址发送请求,并返回服务器响应的类文件对象

response = urllib2.urlopen("http://www.baidu.com/")

#服务器返回的类文件对象支持Python文件对象的操作方法

#read()方法就是读取文件的全部内容,返回字符串

html = response.read()

print html

urllib2默认的User-Agent:Python-urllib2/2.7,当通过urllib2的自带对象URLopen调用请求时,会轻易被服务器人员识破这是是一个爬虫请求所。

所以在大多数情况下会构建一个Request对象如下:

# -*- coding: utf-8 -*-

import urllib2

#通过urllib2。Request()方法构造一个请求对象,将爬虫伪装成一个浏览器进行访问。User-Angent:是爬虫和反爬虫的第一步,养成好的习惯,抒写User-Agent。

ua_headers= {

"User-Agent":" Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3202.89 Safari/537.36"

}

request = urllib2.Request("http://www.baidu.com/",headers= ua_heades)

# 向指定的url地址发送请求,并返回服务器响应的类文件对象

response = urllib2.urlopen(request)

#服务器返回的类文件对象支持Python文件对象的操作方法

#read()方法就是读取文件的全部内容,返回字符串

html = response.read()

print html

####补充

- 很多时候可以采取一种随机User-Agent的方法来更好的避免服务器的反爬机制。

ua_list = [

"Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv2.0.1) Gecko/20100101 Firefox/4.0.1",

"Mozilla/5.0 (Windows NT 6.1; rv2.0.1) Gecko/20100101 Firefox/4.0.1",

"Opera/9.80 (Macintosh; Intel Mac OS X 10.6.8; U; en) Presto/2.8.131 Version/11.11",

"Opera/9.80 (Windows NT 6.1; U; en) Presto/2.8.131 Version/11.11",

"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_0) AppleWebKit/535.11 (KHTML, like Gecko) Chrome/17.0.963.56 Safari/535.11"

]

user_agent = random.choice(ua_list)

- print response.getcode()

- 返回Http响应码,例如以4开头的页面响应码,以5开头的服务器问题。

- print response.geturl()

- 返回具体的url例如上诉例子中就是:http://www.baidu.com/

- print response.info()。

- 返回具体的header信息。

案例:


# -*- coding: utf-8 -*-
import urllib2
import urllib
def loadPage(url,filename):
"""
作用:根据url发送请求,获取服务器响应文件
url:所要爬取的url地址
"""
print "正在下载" + filename
headers = {"User-Agent":"Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv2.0.1) Gecko/20100101 Firefox/4.0.1"}
request = urllib2.Request(url,headers=headers)

return urllib2.urlopen(request).read()
def writePage(html,filename):
"""
作用:将html内容写入到本地
HTML:服务器响应的文件内容
"""
print "正在保存" + filename
with open(filename,"w")as f:
f.write(html)
print "-" * 30
def tiebaSpider(url,beginPage,endPage):
"""
作用:贴吧爬虫调度器,负责组合处理每个页面的url
url:贴吧url的前部分
beginPage:爬取起始页
endPage:爬取结束页
"""
for page in range(beginPage,endPage + 1):
pn = (page - 1)*50
filename = "第" + str(page) + "页.html"
fullurl = url + "&pn=" + str(pn)
html = loadPage(fullurl,filename)
#print fullurl
writePage(html,filename)
print "谢谢使用"
if __name__ == "__main__" :
kw = raw_input("请输入需要爬取的贴吧名:")
beginPage = int(raw_input("请输入起始页:"))
endPage = int(raw_input("请输入结束页:"))
url = "http://tieba.baidu.com/f?"
key = urllib.urlencode({"kw": kw})
fullurl = url + key
tiebaSpider(fullurl, beginPage, endPage)

运行结果如下:请问大神这个报错该怎么解决?python爬虫学习笔记day-2

越努力,越幸运!

python爬虫学习笔记day-2


分享到:


相關文章: