一、爬取今日頭條新聞
為什么要這么爬請看 獲取JS動態(tài)內(nèi)容
既然 selenium 能模仿瀏覽器的行為杆麸,那么我們直接用這個庫來爬取網(wǎng)頁,肯定也是很簡單的事情寞宫。缺點就是既然是模擬瀏覽器行為株灸,那速度是比直接用 json 請求慢得多
那我們可以寫出爬取代碼了崇摄。這里用 css selecter 定位
>>> from selenium import webdriver
>>> driver = webdriver.PhantomJS()
>>> driver.get('http://www.toutiao.com/')
>>> for i in driver.find_elements_by_css_selector('#carouselList > ul > li> a > img'):
print(i.get_attribute("src"))
http://p1.pstatp.com/origin/18a1001128770b4c8365
http://p3.pstatp.com/origin/178100075f23a040ecb5
http://p1.pstatp.com/origin/18a300112cfd26c2c6df
http://p9.pstatp.com/origin/18a5001110bbcae17326
http://p3.pstatp.com/origin/1781000760173eb00269
http://p3.pstatp.com/origin/17810007602775eb7d1d
>>> for i in driver.find_elements_by_css_selector('#carouselList > ul > li> a'):
print(i.get_attribute("href"))
http://www.toutiao.com/group/6399973251997040897/
http://www.toutiao.com/group/6399911996251357442/
http://www.toutiao.com/group/6400082968694440194/
http://www.toutiao.com/group/6399868819300778242/
http://www.toutiao.com/group/6400084033762705666/
http://www.toutiao.com/group/6399915188623343874/
>>> for i in driver.find_elements_by_css_selector('#carouselList > ul > li > a > p'):
print(i.text)
他是上帝送給球迷的足球精靈 37歲生日快樂
>>> len(driver.find_elements_by_css_selector('#carouselList > ul > li > a > p'))
6
>>>
出現(xiàn)了個問題,圖片和新聞的 url 鏈接我們成功爬取到了慌烧,但標題 title 6個卻只顯示了一個逐抑。嘗試了幾種定位方法,結(jié)果還是一樣屹蚊。
把 page_source 傳進 BeautifulSoup厕氨,倒是可以。
有空再接著研究是哪出問題了
二汹粤、爬取今日頭條美女圖片
接著向上篇一樣命斧,來爬取今日頭條圖片
>>> from selenium import webdriver
>>> driver = webdriver.PhantomJS()
>>> driver.get('http://www.toutiao.com/search/?keyword=%E7%BE%8E%E5%A5%B3')
>>> a = driver.find_elements_by_class_name('J_title')
>>> len(a)
20
>>> for i in a:
print(i.text)
氣質(zhì)美女,優(yōu)雅長裙嘱兼,貴婦風范
青澀少女甜美乖萌牛仔背帶裙
高雅清麗国葬,超氣質(zhì)女神
攝影:有一種可遠觀而不可褻玩焉
溫婉優(yōu)雅女子窈窕無雙居家美照
氣質(zhì)卷發(fā)允兒淡雅迷人
三位可愛的 氣質(zhì)非凡 顏值較高 楚楚風韻 你喜歡哪一個
時尚美女愛攝影,不開美顏相機算我服
醉愛你妹——那無比清純白嫩可口的妹妹
白裙飄飄伊人若仙子
人像攝影:原來穿旗袍還是短發(fā)更耐看
別人的單眼皮
17黑色系 永遠是人們心中的大愛
「人像攝影」短裙黑絲 混血氣質(zhì)小魔女
攝影:可愛小清新與熟女的對決芹壕,你選誰勝出汇四?
攝影:憂郁惹人憐惜的
棚拍旗袍
T瘋子攝影:90后清純可愛的
席地而坐,隨性的姑娘有氣質(zhì)
美艷至極靚妹
>>> b =driver.find_elements_by_class_name('img-wrap')
>>> for i in b:
print(i.get_attribute('href'))
http://www.toutiao.com/group/6399967413135884545/
http://www.toutiao.com/group/6399875937064272129/
http://www.toutiao.com/group/6399511749808095746/
http://www.toutiao.com/group/6399741308898132225/
http://www.toutiao.com/group/6400243707849244930/
http://www.toutiao.com/group/6400238927080390914/
http://www.toutiao.com/group/6399718234816741633/
http://www.toutiao.com/group/6399832980781629697/
http://www.toutiao.com/group/6399866594214904066/
http://www.toutiao.com/group/6399716443810496769/
http://www.toutiao.com/group/6400085128462516482/
http://www.toutiao.com/group/6400180716161253633/
http://www.toutiao.com/group/6399949700431003905/
http://www.toutiao.com/group/6399936693873737986/
http://www.toutiao.com/group/6399757089493025025/
http://www.toutiao.com/group/6399803425404436738/
http://www.toutiao.com/group/6399716046782431489/
http://www.toutiao.com/group/6399712965301715202/
http://www.toutiao.com/group/6399724047525150977/
http://www.toutiao.com/group/6399723310598799618/
圖片內(nèi)容的鏈接很輕松就獲取到了踢涌,接下去我們只要進去每個網(wǎng)頁通孽,獲取里面的圖片下載鏈接就行了。如果再用 selenium 進去每個網(wǎng)頁去下載圖片睁壁,這效率顯然是很慢的背苦,干脆用 requests 吧。這項小工作在這就不再重復了堡僻,前面我們爬靜態(tài)網(wǎng)頁已經(jīng)做過很多了糠惫。
我們現(xiàn)在來研究下另一個重要的問題,就是如何獲取更多的圖片網(wǎng)頁鏈接钉疫。
在這個網(wǎng)站中硼讽,可以看到只有把瀏覽器拉到底部,才能顯示更多的圖片牲阁。如何做到呢
# 拉到頂部
>>> driver.execute_script("window.scrollBy(0,document.body.scrollTop=0)","")
# 拉到底部
>>> driver.execute_script("window.scrollBy(0,document.body.scrollHeight)","")
>>> driver.execute_script("window.scrollBy(0,document.body.scrollHeight=10000)","")
>>> driver.execute_script("window.scrollBy(0,document.body.scrollTop)","")
>>> import time
>>> time.sleep(3)
>>> b = driver.find_elements_by_class_name('J_title')
>>> len(b)
120
以上是通過 execute——script 執(zhí)行 js 腳本操作固阁。
也可以通過 ActionChains 模擬鼠標操作。
那么每次下拉都可以獲得 20 個圖片網(wǎng)址城菊。
所以總的思路如下
(一)备燃、用 selenium 模擬瀏覽器登陸網(wǎng)頁
(二)、模擬瀏覽器中下拉頁面到底部凌唬,不斷加載更多圖片網(wǎng)址
(三)并齐、在 selenium 定位元素,找出標題及圖片網(wǎng)址
(四)、對每個圖片網(wǎng)址用 requests 請求况褪,提取所有圖片下載鏈接
(五)撕贞、下載圖片
并不是很難,就懶得寫代碼啦