共计 1991 个字符,预计需要花费 5 分钟才能阅读完成。
Python 爬虫网页的根本流程:
首先选取一部分精心筛选的种子 URL。
将这些 URL 放入待抓取 URL 队列。
从待抓取 URL 队列中读取待抓取队列的 URL,解析 DNS,并且失去主机的 IP,并将 URL 对应的网页下载下来,存储进已下载网页库中。此外,将这些 URL 放进已抓取 URL 队列。
剖析已抓取 URL 队列中的 URL,从已下载的网页数据中剖析出其余 URL,并和已抓取的 URL 进行比拟去重,最初将去重过的 URL 放入待抓取 URL 队列,从而进入下一个循环。
1、HTTP 申请实现
应用 urllib2/urllib 实现:
urllib2 和 urllib 是 Python 中的两个内置模块,要实现 HTTP 性能,实现形式是以 urllib2 为主,urllib 为辅。
urllib2 提供一个根底函数 urlopen,通过向指定的 URL 发出请求来获取数据。最简略的模式是:
import urllib2
response=urllib2.urlopen('http://www.zhihu.com')
html=response.read()
print html
其实能够将上面对 http://www.zhihu.com 的申请响应分为两步,一步是申请,一步是响应,模式如下:
import urllib2
# 申请
request=urllib2.Request('http://www.zhihu.com')
# 响应
response = urllib2.urlopen(request)
html=response.read()
print html
还有 post 申请实现:
import urllib
import urllib2
url = 'http://www.xxxxxx.com/login'
postdata = {'username' : 'qiye',
'password' : 'qiye_pass'}
# info 须要被编码为 urllib2 能了解的格局,这里用到的是 urllib
data = urllib.urlencode(postdata)
req = urllib2.Request(url, data)
response = urllib2.urlopen(req)
html = response.read()
将下面的例子改写一下,加上申请头信息,设置一下申请头中的 User-Agent 域和 Referer 域信息。2、申请头 headers 解决
import urllib
import urllib2
url = 'http://www.xxxxxx.com/login'
user_agent = 'Mozilla/4.0 (compatible; MSIE 5.5; Windows NT)'
referer='http://www.xxxxxx.com/'
postdata = {'username' : 'qiye',
'password' : 'qiye_pass'}
# 将 user_agent,referer 写入头信息
headers={'User-Agent':user_agent,'Referer':referer}
data = urllib.urlencode(postdata)
req = urllib2.Request(url, data,headers)
response = urllib2.urlopen(req)
html = response.read()
urllib2 对 Cookie 的解决也是主动的,应用 CookieJar 函数进行 Cookie 的治理。如果须要失去某个 Cookie 项的值,能够这么做:3、Cookie 解决
import urllib2
import cookielib
cookie = cookielib.CookieJar()
opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cookie))
response = opener.open('http://www.zhihu.com')
for item in cookie:
print item.name+':'+item.value
然而有时候会遇到这种状况,咱们不想让 urllib2 主动解决,咱们想本人增加 Cookie 的内容,能够通过设置申请头。
import urllib2
opener = urllib2.build_opener()
opener.addheaders.append(( 'Cookie', 'email=' + "xxxxxxx@163.com") )
req = urllib2.Request("http://www.zhihu.com/")
response = opener.open(req)
print response.headers
retdata = response.read()
无论如何,最初非常感谢大家点击观看我的文章,如过对你有帮忙烦请抬抬小手给小编点点赞。有任何问题或者须要文章内的材料能够后盾私信我,欢送“骚扰”。
正文完