简单爬虫架构:URL管理器,网页下载器,网页解析器。
一、URL管理器
主要实现方法:
二、网页下载器urllib
1、最简单
urllib.request.urlopen(url, data=None, [timeout, ]*, cafile=None, capath=None, cadefault=False, context=None)
url: 需要打开的网址
data:Post提交的数据
timeout:设置网站的访问超时时间
import urllib.request
response = urllib.request.urlopen('http://www.baidu.com')
html = response.read()
print(html)
2、使用Requeest
urllib.request.Request(url, data=None, headers={}, method=None)
import urllib.request
req = urllib.request.Request('http://www.baidu.com')
response = urllib.request.urlopen(req)
html = response.read()
print(html)
需要加headers
import urllib.request
import urllib.parse
url = r'http://www.lagou.com/jobs/positionAjax.json?'
headers = {
'User-Agent': r'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) '
r'Chrome/45.0.2454.85 Safari/537.36 115Browser/6.0.3',
'Referer': r'http://www.lagou.com/zhaopin/Python/?labelWords=label',
'Connection': 'keep-alive'
}
req = urllib.request.Request(url, headers=headers)
page = urllib.request.urlopen(req).read()
page = page.decode('utf-8')
print(page)
用来包装头部的数据:
User-Agent :这个头部可以携带如下几条信息:浏览器名和版本号、操作系统名和版本号、默认语言
Referer:可以用来防止盗链,有一些网站图片显示来源http://*.com,就是检查Referer来鉴定的
Connection:表示连接状态,记录Session的状态。
需要POST数据
urllib.request.urlopen(url, data=None, [timeout, ]*, cafile=None, capath=None, cadefault=False, context=None)
经过urlencode()转换后的data数据为?first=true?pn=1?kd=Python,最后提交的url为
http://www.lagou.com/jobs/positionAjax.json?first=true?pn=1?kd=Python
import urllib.request
import urllib.parse
url = r'http://www.lagou.com/jobs/positionAjax.json?'
headers = {
'User-Agent': r'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) '
r'Chrome/45.0.2454.85 Safari/537.36 115Browser/6.0.3',
'Referer': r'http://www.lagou.com/zhaopin/Python/?labelWords=label',
'Connection': 'keep-alive'
}
data = {
'first': 'true',
'pn': 1,
'kd': 'Python'
}
data = urllib.parse.urlencode(data).encode('utf-8')
req = urllib.request.Request(url, headers=headers, data=data)
page = urllib.request.urlopen(req).read()
page = page.decode('utf-8')
print(page)
使用代理
proxy = urllib.request.ProxyHandler({'http':'5.22.195.215:80'})
opener = urllib.request.build_opener(proxy) #加载opener
urllib.request.install_opener(opener) #安装opener
data = urllib.parse.urlencode(data).encode('utf-8')
page = opener.open(url,data).read()
print(page)
使用cookie
import urllib.request
import urllib.parse
import http.cookiejar
url = r'http://www.baidu.com'
cookie = http.cookiejar.CookieJar()
#声明一个CookieJar对象实例来保存cookie
handler = urllib.request.HTTPCookieProcessor(cookie)
#利用urllib库的HTTPCookieProcessor对象来创建cookie处理器
opener = urllib.request.build_opener(handler)
#加载opener
urllib.request.install_opener(opener)
#安装opener
response = opener.open(url)
#用带有cookie的urllib访问网页
page = response.read()
print(page)
三、网页解析器
主要是从网页中获取有价值的数据(有效数据和URL)。
最主要用到BeautifulSoup4
Beautiful Soup 是用Python写的一个HTML/XML的解析器,它可以很好的处理不规范标记并生成剖析树(parse tree)。 它提供简单又常用的导航(navigating),搜索以及修改剖析树的操作。它可以大大节省你的编程时间。
具体使用方法http://cuiqingcai.com/1319.html