編譯環(huán)境:python v3.5.0, mac osx 10.11.4
第三方庫:針對網(wǎng)頁解析王污,python有豐富的第三方庫如:
BeautifulSoup, urllib, requests etc.
可以通過import
來引入指定第三方庫惫皱,通過from lib import function
導(dǎo)入第三方庫中的指定函數(shù)狰挡。如:
import requests, urllib.request, time, os from bs4 import BeautifulSoup # 導(dǎo)入需要用到的第三方庫
對網(wǎng)頁進(jìn)行解析:BeautifulSoup & url lib
url = 'https://www.ncbi.nlm.nih.gov/core/alerts/alerts.js_=1462105646975' wb_dt=requests.get(url) soup=BeautifulSoup(wb_dt.text,'lxml')
上述代碼可以解析指定url中的HTML, 通過requests中的get方式獲得裙椭。
wb_dt.text
可以獲得HTML的純文本文件驴娃。
BeautifulSoup(wb_dt.text,'lxml')
則能對傳入的純文本文件采用lxml庫進(jìn)行解析削饵。
篩選需要的信息:soup.select('selector')
可以通過chrome瀏覽器中的檢查查詢指定元素的位置岩瘦,復(fù)制selector到
soup.select('selector')
這一步驟主要是為了篩選所選元素特殊的位置喊衫,selector只要能指定到所需信息的位置即可厢拭。
動態(tài)網(wǎng)頁解析
當(dāng)我們需要爬取動態(tài)網(wǎng)頁大量頁面信息時,我們可以從不斷response為HTML的headers中找尋規(guī)律疆柔。如圖所示劈伴,我們發(fā)現(xiàn)其連續(xù)加載其實是在返回時不斷通過request中url的改變生成密末。
實戰(zhàn)源代碼 1 爬取霉霉照片
其中導(dǎo)入的os模塊可以判斷目錄是否存在以及新建目錄。
os.makedir(path)
與os.makedirs(path)
的區(qū)別在于若父級目錄不存在跛璧,則os.makedir(path)
會報錯严里,而os.makedirs(path)
則會連同父級目錄一起創(chuàng)建os.path.exists(path)
則可以檢查目錄是否存在
總結(jié) 1
1、第三方庫可以良好的解析我們需要爬取的網(wǎng)頁
2追城、通過刷新發(fā)現(xiàn)刹碾,觀察response可以發(fā)現(xiàn)request規(guī)律,從而抓取靜態(tài)網(wǎng)頁
3座柱、針對具有反爬蟲的網(wǎng)頁迷帜,可以利用time庫中的
time.sleep(seconds)
來降低訪問頻率叨吮。加入header和proxies也可以防止針對ip的反爬取。
4瞬矩、常用user agent https://blog.phpgao.com/user_agent_collection.html
實戰(zhàn)源代碼 2 爬取一頁商品數(shù)據(jù)(初識API)
BeautifulSoup文檔
https://www.crummy.com/software/BeautifulSoup/bs4/doc/
利用正則表達(dá)式
**篩選出選定區(qū)域的字符串
.strings
**去除字符串中的大片空格區(qū)域
.stripped_strings
整體代碼
- 觀察推廣和轉(zhuǎn)轉(zhuǎn)href與正常商品信息之間的差別茶鉴,可以通過
soup.select('a[href^="http://bj.58.com/"]')
- 發(fā)現(xiàn)返回值不對時,值可能由js景用,node.js等生成
打印soup 搜索變量名再從network文件憑經(jīng)驗中找尋
主要看response返回的值為文本的文件
確定目標(biāo)后看url和headers涵叮,遇到反爬將cookies等全部寫入headers中逐個嘗試,此次實踐伞插,request中需要加referee
此次找尋流程:
從按前面提到的方法割粮,網(wǎng)頁中檢查瀏覽量。
發(fā)現(xiàn)soup返回值不對媚污,查詢soup值發(fā)現(xiàn)所含值為0舀瓢。
All source code can be downloaded at GitHub:
https://github.com/jacobkam/WebCrawlerLearning.git