關(guān)于這篇文章有幾句話想說,首先給大家道歉,之前學(xué)的時候真的覺得下述的是比較厲害的東西,但是后來發(fā)現(xiàn)真的是基礎(chǔ)中的基礎(chǔ),內(nèi)容還不是很完全。再看一遍自己寫的這篇文章,突然有種想自殺的沖動。emmm所以樓主決定本文全文抹掉重寫一遍,并且為之前點進(jìn)來看的七十多訪問量的人,致以最誠摯的歉意。好想死。。
在學(xué)完了爬蟲全部內(nèi)容后,樓主覺得勉強有資格為接觸爬蟲的新人指指路了。那么廢話不多說,以下正文:
一、獲取內(nèi)容
說爬蟲一定要先說爬取內(nèi)容的方法,python有這么幾個支持爬蟲的庫,一個是urllib和它的后續(xù)版本庫,這個庫做爬取的時候生成的中繼對象是比較多的,樓主也記不大住都有什么,而且這個庫的使用在樓主看來有些過時了。更加建議做爬取的時候使用requests庫(ps:不是request)
使用urllib:
html = urllib.request.urlopen(url).read()
使用requests:
r = requests.get(url)
對于獲取到的內(nèi)容,有以下方法進(jìn)行處理:
1、使用正則表達(dá)式匹配。
2、使用BeautifulSoup對爬取內(nèi)容標(biāo)簽對象化。
3、通過構(gòu)造節(jié)點樹使用Xpath獲取元素。
第一種方法勝在直接,效率高而且不需要安裝三方庫。第二種方法勝在簡單,標(biāo)簽對象化后不需要寫復(fù)雜的正則表達(dá)式,而且提取標(biāo)簽更加方便。第三種方法勝在靈活,獲取內(nèi)容更加靈活,就是語法有點多,不熟的話可以對著Xpath語法文檔寫。
使用正則表達(dá)式匹配:
pattern_content = '<div class="rich_media_content " id="js_content">(.*?)</div>'content1 = re.findall(pattern_content, html, re.S)
使用BeautifulSoup對爬取內(nèi)容標(biāo)簽對象化:
soup = bs4.BeautifulSoup(html, 'lxml')imgs = soup.find_all('img')
關(guān)于BeautifulSoup的安裝請自行百度,沒記錯的話直接pip是可行的。
通過構(gòu)造節(jié)點樹使用Xpath獲取元素:
selector=etree.HTML(html)content=selector.xpath('//div[@id="content"]/ul[@id="ul"]/li/text()')
至此,爬取的基本內(nèi)容就敘述完畢了,這里給出的是最簡單的范例,如果想深入了解某種方法,建議去查詢更詳細(xì)的技術(shù)文檔。
下面內(nèi)容就是之前的了,略作刪改。
二、偽造表單請求頭
很多網(wǎng)站上的數(shù)據(jù)爬取比較簡單,只需要直接request那個網(wǎng)址就可以,很多小型網(wǎng)站都是這樣。面對這樣的網(wǎng)站數(shù)據(jù),只需要花個幾分鐘隨便寫幾行代碼,就能爬到我們想要的數(shù)據(jù)。
但是想要爬取稍微大型一些的網(wǎng)站數(shù)據(jù),就不會這么容易了。這些網(wǎng)站的服務(wù)器,會分析收到的每一條request,來判斷該請求是否為用戶操作。這種技術(shù),我們把它稱為反爬技術(shù)。常見的反爬技術(shù),樓主知道的有上面所述的分析請求,還有驗證碼技術(shù)。對于這兩種情況,我們在構(gòu)造爬蟲程序的時候就需要稍微費點力氣了。
新聞熱點
疑難解答