⑴ 從零開始學python-使用Selenium抓取動態網頁數據
AJAX(Asynchronouse javaScript And XML:非同步JavaScript和XML)通過在後台與伺服器進行少量數據交換,Ajax 可以使網頁實現非同步更新,這意味著可以在不重新載入整個網頁的情況下,對網頁的某部分進行局部更新。傳統的網頁(不使用Ajax)如果需要更新內容,必須重載整個網頁頁面。
因為傳統的網頁在傳輸數據格式方面,使用的是 XML 語法,因此叫做 AJAX ,其實現在數據交互基本上都是使用 JSON 。使用AJAX載入的數據,即使使用了JS將數據渲染到了瀏覽器中,在 右鍵->查看網頁源代碼 還是不能看到通過ajax載入的數據,只能看到使用這個url載入的html代碼。
法1:直接分析ajax調用的介面。然後通過代碼請求這個介面。
法2:使用Selenium+chromedriver模擬瀏覽器行為獲取數據。
Selenium 相當於是一個機器人。可以模擬人類在瀏覽器上的一些行為,自動處理瀏覽器上的一些行為,比如點擊,填充數據,刪除cookie等。 chromedriver 是一個驅動 Chrome 瀏覽器的驅動程序,使用他才可以驅動瀏覽器。當然針對不同的瀏覽器有不同的driver。以下列出了不同瀏覽器及其對應的driver:
現在以一個簡單的獲取網路首頁的例子來講下 Selenium 和 chromedriver 如何快速入門:
參考:Selenium的使用
直接直接分析ajax調用的介面爬取
selenium結合lxml爬取
⑵ 如何用Python爬蟲抓取網頁內容
首先,你要安裝requests和BeautifulSoup4,然後執行如下代碼.
importrequests
frombs4importBeautifulSoup
iurl='http://news.sina.com.cn/c/nd/2017-08-03/doc-ifyitapp0128744.shtml'
res=requests.get(iurl)
res.encoding='utf-8'
#print(len(res.text))
soup=BeautifulSoup(res.text,'html.parser')
#標題
H1=soup.select('#artibodyTitle')[0].text
#來源
time_source=soup.select('.time-source')[0].text
#來源
origin=soup.select('#artibodyp')[0].text.strip()
#原標題
oriTitle=soup.select('#artibodyp')[1].text.strip()
#內容
raw_content=soup.select('#artibodyp')[2:19]
content=[]
forparagraphinraw_content:
content.append(paragraph.text.strip())
'@'.join(content)
#責任編輯
ae=soup.select('.article-editor')[0].text
這樣就可以了
⑶ 如何用python抓取這個網頁的內容
如果包含動態內容可以考慮使用Selenium瀏覽器自動化測試框架,當然找人有償服務也可以
⑷ 如何用python抓取網頁資料庫
最簡單可以用urllib,python2.x和python3.x的用法不同,以python2.x為例:
import
urllib
html
=
urllib.open(url)
text
=
html.read()
復雜些可以用requests庫,支持各種請求類型,支持cookies,header等
再復雜些的可以用selenium,支持抓取javascript產生的文本
⑸ python如何讀取網頁中的數據
用Beautiful Soup這類解析模塊:
Beautiful Soup 是用Python寫的一個HTML/XML的解析器,它可以很好的處理不規范標記並生成剖析樹(parse tree);
它提供簡單又常用的導航(navigating),搜索以及修改剖析樹的操作;
用urllib或者urllib2(推薦)將頁面的html代碼下載後,用beautifulsoup解析該html;
然後用beautifulsoup的查找模塊或者正則匹配將你想獲得的內容找出來,就可以進行相關處理了,例如:
html='<html><head><title>test</title></head><body><p>testbody</p></body></html>'
soup=BeautifulSoup(html)
soup.contents[0].name
#u'html'
soup.comtents[0].contents[0].name
#u'head'
head=soup.comtents[0].contents[0]
head.parent.name
#u'html'
head.next
#u'<title>test</title>
⑹ python怎樣抓取網頁中的文字和數字數據
通過xpath路徑來定位到要提取的元素,在路徑後面加上/text()可以提取該元素的文本,如果是要提取屬性值,在路徑後面加上/@屬性名就可以。如果要只採集數字或者文字,可以使用正則來實現。比如數字的正字表達式:[0-9]+。希望可以幫到題主
⑺ python爬取大量數據(百萬級)
當用python爬取大量網頁獲取想要的數據時,最重要的問題是爬蟲中斷問題,python這種腳本語言,一中斷
進程就會退出,怎麼在中斷後繼續上次爬取的任務就至關重要了。這里就重點剖析這個中斷問題。
第一個問題: 簡單點的用動態代理池就能解決,在爬取大量數據的時候,為了速度不受影響,建議使用一些緩
存的中間件將有效的代理 ip 緩存起來,並定時更新。這里推薦 github 這個倉庫
https://github.com/jhao104/proxy_pool , 它會做ip有效性驗證並將 ip 放入 redis ,不過實現過於復雜
了,還用到了 db ,個人覺得最好自己修改一下。困難點的就是它會使用別的請求來進行判斷當前的ip是否
是爬蟲,當我們過於聚焦我們的爬蟲請求而忽略了其他的請求時,可能就會被伺服器判定為爬蟲,進而這個ip
會被列入黑名單,而且你換了ip一樣也會卡死在這里。這種方式呢,簡單點就用 selenium + chrome 一個一個
去爬,不過速度太慢了。還是自己去分析吧,也不會過復雜的。
第二個問題: 網路連接超時是大概率會遇到的問題,有可能是在爬取的時候本地網路波動,也有可能是爬
取的服務端對ip做了限制,在爬取到了一定量級的時候做一些延遲的操作,使得一些通用的 http 庫超時
( urllib )。不過如果是服務端動的手腳一般延遲不會太高,我們只需要人為的設置一個高一點的
timeout 即可(30 秒),最好在爬取開始的時候就對我們要用的爬取庫進行一層封裝,通用起來才好改
動。
第三個問題: 在解析大量靜態頁面的時候,有些靜態頁面的解析規則不一樣,所以我們就必須得做好斷點
續爬的准備了( PS : 如果簡單的忽略錯誤可能會導致大量數據的丟失,這就不明智了)。那麼在調試的過
程中斷點續爬有個解決方案,就是生產者和消費者分離,生產者就是產生待爬 url 的爬蟲,消費者就是爬取
最終數據的爬蟲。最終解析數據就是消費者爬蟲了。他們通過消息中間件連接,生產者往消息中間件發送待
爬取的目標信息,消費者從裡面取就行了,還間接的實現了個分布式爬取功能。由於現在的消費中間件都有
ack 機制,一個消費者爬取鏈接失敗會導致消息消費失敗,進而分配給其他消費者消費。所以消息丟失的
概率極低。不過這里還有個 tips , 消費者的消費超時時間不能太長,會導致消息釋放不及時。還有要開啟
消息中間價的數據持久化功能,不然消息產生過多而消費不及時會撐爆機器內存。那樣就得不償失了。
第四個問題: 這種情況只能 try except catch 住了,不好解決,如果單獨分析的話會耗費點時間。但在
大部分數據 (99%) 都正常的情況下就這條不正常拋棄就行了。主要有了第三個問題的解決方案再出現這
種偶爾中斷的問就方便多了。
希望能幫到各位。
⑻ 【Python爬蟲】分析網頁真實請求
1、抓取網頁、分析請求
2、解析網頁、尋找數據
3、儲存數據、多頁處理
翻頁有規律:
很多網址在第一頁時並沒有變化,多翻下一頁後規律就出來,比如 豆瓣第一頁 和 豆瓣第三頁
發現start為40,limit=20,所以猜測start=0就是第一頁,每頁顯示20條數據,對於第三頁顯示的參數可以一個個刪除驗證,可以減去不必要的參數, 但是刪除前一定要做好數據的對比
(1) 文本框輸入後產生一個請求,如常見的登錄、注冊頁面
Referer:表示當前請求的來源
Request URL:表示實際請求地址
翻頁後URL不變,該如何尋找請求?
如: http://www.zkh360.com/zkh_catalog/3.html
通過對比可以發現網站是通過pageIndex參數控制翻頁的,?表示連接
接下來用抓包工具分析下 ,從第四頁開始看URL就知道了,但是前面幾面需要查看請求的參數,這里偏多,就切換到【Inspectors--Webforms】選項,看的比較直觀
類似的網站還有 今日頭條 ,有興趣的朋友可以去研究下
(可通過獲取max_behot_time的值而改變as和cp)
⑼ 如何用python抓取網頁數據
用 requests 庫構造請求;
用 pyquery 庫解析網頁;
用 sqlalchemy 存儲數據。
有這3個庫,基本上的網頁都可以抓取了。
也可以用scrapy,但是太復雜,一個的學習成本大於前三個之和