學(xué)習(xí)視頻地址
代碼參考(Python3.4)
遇見了一些坑今豆,特別是字符編碼的問題嫌拣,比較蛋疼,找了一下午呆躲。
基本流程
爬蟲調(diào)度端 -> URL管理器 -> 網(wǎng)頁下載器 -> 網(wǎng)頁解析器 -> 有價(jià)值數(shù)據(jù)
↑ |
↑--------------------------|
URL管理器
管理待抓取URL集合和已抓取集合
網(wǎng)頁下載器
將網(wǎng)絡(luò)上的HTML文件下載下來
第一種方式
import urllib2
# 直接請求
response = urllib2.urlopen('http://www.baidu.com')
# 獲取狀態(tài)碼异逐,如果是 200 表示獲取成功
print response.getcode()
# 讀取內(nèi)容
cont = response.read()
第二種方式
import urllib2
# 創(chuàng)建 Request 對象
request = urllib2.Request(url)
# 添加數(shù)據(jù)
request.add_data('a','1')
# 添加 Http 的 Header
request.add_header('User-Agent','Mozilla/5.0')
# 發(fā)送請求獲取結(jié)果
response = urllib2.urlopen(request)
第三種方式
import urllib2, cookielib
# 創(chuàng)建 Cookie 容器
cj = cookielib.CookieJar()
# 創(chuàng)建 1 個 opener
opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cj))
# 給 urllib2 安裝 opener
urllib2.install_opener(opener)
# 使用帶有 cookie 的 urllib2 訪問網(wǎng)頁
response = urllib2.urlopen('http://www.baidu.com')
網(wǎng)頁解析器
- 正則表達(dá)式
- html.parser
- Beautiful Soup
- lxml
第一種是模糊匹配,后三者會解析成DOM樹插掂,再進(jìn)行一些操作灰瞻。
Beautiful Soup 文檔
http://www.crummy.com/software/BeautifulSoup/bs4/doc.zh/
文檔中顯示例子在Python2.7和Python3.2中的執(zhí)行結(jié)果相同
,所以大家不用擔(dān)心版本問題
使用命令安裝 pip install beautifusoup4
簡單使用
from bs4 import BeautifulSoup
soup = BeautifulSoup(
html_doc, # HTML 文檔字符
'html.parse' # HTML 解析器
from_encoding='utf8' # HTML 文檔的編碼
)
# 查找所有標(biāo)簽為 a 的節(jié)點(diǎn)
soup.find_all('a')
# 查找所有標(biāo)簽為a燥筷,鏈接符合 /view/123.html 形式的節(jié)點(diǎn)
soup.find_all('a',href='/view/123.html')
soup.find_all('a',href=re.compile(r'/view/\d+\.html'))
# 查找所有標(biāo)簽為 div箩祥, class 為 abc ,文字為 Python 的節(jié)點(diǎn)
soup.find_all('div',class_='abc',string='Python')
# 假如得到節(jié)點(diǎn) <a href="/categroy">Python</a>
# 獲取查到節(jié)點(diǎn)的標(biāo)簽名稱
node.name
# 獲取查到節(jié)點(diǎn)的 href 屬性
node['href']
# 獲取查到鏈接的文字
node.get_text()
# 官網(wǎng)上的 demo
from bs4 import BeautifulSoup
html_doc = """
<html><head><title>The Dormouse's story</title></head>
<body>
<p class="title"><b>The Dormouse's story</b></p>
<p class="story">Once upon a time there were three little sisters; and their names were
<a class="sister" id="link1">Elsie</a>,
<a class="sister" id="link2">Lacie</a> and
<a class="sister" id="link3">Tillie</a>;
and they lived at the bottom of a well.</p>
<p class="story">...</p>
"""
soup = BeautifulSoup(html_doc,"html.parser")
print(soup.find_all('a'))