-
形成循環(huán) 知道完成任務(wù)后形成有價值的數(shù)據(jù)并輸出
查看全部 -
簡單的爬蟲結(jié)構(gòu)
?以及運行流程
查看全部 -
爬蟲系統(tǒng)設(shè)計
查看全部 -
要加強練習(xí)~
查看全部 -
使用python3
1、
from urllib import request as urllib2
import http.cookiejar
2、
所有的print語句后需要加()
3、
cj=http.cookiejar.CookieJar()查看全部 -
urllib2的三種下載網(wǎng)頁的方法:
1、給定URL,傳送給urllib2.urlopen(url),實現(xiàn)網(wǎng)頁的下載。對應(yīng)代碼為:
import urllib2
#直接請求
response=urllib2.urlopen('http://www.baidu.com')
#獲取狀態(tài)碼,如果是200表示獲取成功
print response.getcode()
#讀取內(nèi)容
cont=response.read()
2、添加data(向服務(wù)器提交需要用戶輸入的)、http header(向服務(wù)器提交http的頭信息)此時urllib2.urlopen以request作為參數(shù)發(fā)送網(wǎng)頁請求,對應(yīng)代碼:
import urllib2
#創(chuàng)建request對象
request=urllib2.request(url)
#添加數(shù)據(jù) 例如賦值a=1
request.add-data('a',‘1’)
#添加http的header? 例如把爬蟲偽裝成Mozilla的瀏覽器
request.add-header(‘User-Agent’,‘Mozilla/5.0’)
#發(fā)送請求獲取結(jié)果
response=urllib2.urlopen(request)
3、例如有些網(wǎng)頁需要用戶的登陸才能訪問,需要添加cookie的處理,使用HTTPCookieProcessor;例如有些網(wǎng)頁需要代理才能訪問,使用ProxyHandler ; 例如有些網(wǎng)頁的協(xié)議是使用HTTPS加密訪問,使用HTTPSHandler ;例如有些網(wǎng)頁的URL可以自動的相互跳轉(zhuǎn)關(guān)系,使用HTTPRedirectHandler。這些handler傳送給urllib2 build opener.因此urllib2具有場景處理能力。然后依然使用urllib2的urlopen的方法來存儲一個URL/request來實現(xiàn)網(wǎng)頁的下載。
對應(yīng)代碼:(例如增強cookie的處理)
#導(dǎo)入urllib2和cookielib這兩個模塊
import urllib2,cookielib
#創(chuàng)建cookie容器
cj=cookielib.CookieJar()
#以Cookie Jar為參數(shù)生成一個headler,再傳給urllib2.build-opener方法來生成一個opener對象。就是創(chuàng)建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)頁下載器(核心):將互聯(lián)網(wǎng)的URL對應(yīng)網(wǎng)頁下載到本地的工具
(目的是為了將網(wǎng)頁下載到本地才能夠進行后期的分析和處理)
網(wǎng)頁下載器類似于網(wǎng)頁瀏覽器,會將URL對應(yīng)的互聯(lián)網(wǎng)網(wǎng)頁以HTML的形式下載到本地,存儲成本地文件或者本地字符串,然后進行后期的分析和處理。
網(wǎng)頁下載器:
urllib2:Python官方基礎(chǔ)模塊(直接的URL下載或者向網(wǎng)頁提交一些用戶輸入的數(shù)據(jù) 甚至支持登陸網(wǎng)頁的cookie處理 和需要代理訪問的代理處理等這些增強功能)
requests:更強大的第三方軟件
urllib2是本課程實踐
查看全部 -
Python爬蟲URL管理器的實現(xiàn)方式(三種)
(一)將已爬取或和待爬取的URL集合存放在內(nèi)存中,用Python語言的話,可以將這兩個URL集合放在set()數(shù)據(jù)結(jié)構(gòu)中,Python的set結(jié)構(gòu)可以自動去除重復(fù)的內(nèi)容,
(二)將URL存放在關(guān)系數(shù)據(jù)庫中,建立一個表,有兩個字段(url,is_crawled),is_crawled字段標志這個URL的狀態(tài)是待爬取還是已爬取。
(三)將URL存放在一個緩存數(shù)據(jù)庫中,比如redis,redis本身支持set的結(jié)構(gòu),所以我們可以將待爬取和已爬取存儲在兩個set中。
大型公司適用緩存數(shù)據(jù)庫
個人、小型公司適用內(nèi)存,不夠用時再用關(guān)系型數(shù)據(jù)庫
實戰(zhàn)演習(xí)用python的set
查看全部 -
URL管理器的作用:防止重復(fù)抓取、循環(huán)抓取。
URL管理器的功能:
3、判斷是否還有帶爬取URL
4、獲取帶爬取URL
1、判斷待添加的URL是否本來就在容器中
2、添加心得URL到待爬取集合
5、將URL從待爬取移動到已爬取集合
查看全部 -
循環(huán)結(jié)束后輸出價值數(shù)據(jù)成我們需要的格式。
查看全部 -
爬蟲調(diào)度段(啟動、停止、監(jiān)視爬蟲)
三大模塊:URL管理器(管理所有URL數(shù)據(jù))中取出待爬取的URL,傳送給網(wǎng)頁下載器(URL指定的網(wǎng)頁下載,存儲成字符串),將字符串傳送給網(wǎng)頁解析器(解析出有價值的數(shù)據(jù)),再到URL管理器。
每一個網(wǎng)頁都有指向其他網(wǎng)頁的URL,這些URL被解析出來之后,可以補充到URL管理器。因此,三大模塊的關(guān)系是循環(huán)。
結(jié)果:有價值的數(shù)據(jù)
查看全部 -
import?re 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?>Elsie</a>, <a?>Lacie</a>?and <a?>Tillie</a>; and?they?lived?at?the?bottom?of?a?well.</p> <p?class="story">...</p> """ soup?=?BeautifulSoup(html_doc,'html.parser') print('獲取所有鏈接') links?=?soup.find_all('a') for?link?in?links: ????print(link.name,link['href'],link.get_text()) print('獲取指定鏈接') link_node?=?soup.find('a',href?=?'http://example.com/elsie') print(link_node.name,link_node['href'],link_node.get_text()) print('正則匹配') link_node?=?soup.find('a',href?=?re.compile(r"cie")) print(link_node.name,link_node['href'],link_node.get_text()) print('獲取p段落文字') link_node?=?soup.find('p',class_?=?'title') print(link_node.name,link_node.get_text())
查看全部 -
import?urllib.request from?http?import?cookiejar url?=?'http://www.baidu.com' print('第一種方法') response1?=?urllib.request.urlopen(url) print(response1.getcode()) print(len(response1.read())) print('第二種方法') request?=?urllib.request.Request(url) request.add_header('user-agent','Mozilla/5.0') response2?=?urllib.request.urlopen(request) print(response2.getcode()) print(len(response2.read())) print('第三種方法') cj?=?cookiejar.CookieJar() opener?=?urllib.request.build_opener(urllib.request.HTTPCookieProcessor(cj)) urllib.request.install_opener(opener) response3?=?urllib.request.urlopen(url) print(response3.getcode()) print(cj) print(response3.read())
查看全部 -
爬蟲查看全部
-
五個模塊:?
爬蟲總調(diào)度程序 spider_main url
管理器? ? ? ?url_manage?
網(wǎng)頁下載器? ? ? html_downloader?
網(wǎng)頁解析器? ? ? html_parser?
輸出 ? ? ? ? ? ?html_outputer
查看全部
舉報