如何使用python爬蟲獲取bing.com每日圖片的介紹?

最近用python寫了個扒必應壁紙的腳本,後來發現必應的每日壁紙是有對應介紹的,就想著把介紹一起扒下來。就是這個:

但是,查看源代碼是找不到這段文字的。用瀏覽器的『檢查』功能(對著側邊欄使用)倒是可以看到:

但是並不知道這段代碼的地址,還是搞不下來……
請問這段文字究竟在什麼地方?我該怎麼正確地訪問到每天的介紹文字?


分析javascript不難啊

先看最後效果,懶得解析了,你自己解析吧
最主要是告訴具體方法

1.點擊左右按鈕,然後再點回來,就可以發現下面的這個網址

2.然後查看這個網址的請求

currentDate 不用說,肯定就是今天的日期
IG查看網頁源代碼肯定在裡面

IID也一樣,所以 直接requests.get一個請求進行
實現代碼如下:

def gettext():
r = requests.get("http://cn.bing.com/")
ig = r.text.split("IG:"")[1].split(""")[0]
id = r.text.split("target="_blank"")[-2].split("h="ID=")[1].split(""")[0]
data = {
"IG":ig,"ID":id,"currentDate":"20160609"
}
z = requests.get("http://cn.bing.com/cnhp/life",data)
print z.text

當然currentDate 自己生成當天的日期


bing這個一點都不複雜啊,直接瀏覽器F12調試模式,如下圖:

然後打開的頁面裡面:URL裡面那個紅圈就是13位的時間戳,表示日期(時間戳用法自行必應)
返回數據中的紅圈就是圖片的實際URL,好了,可以下載了。


這個是動態生成的頁面,如果你查看網頁源代碼的話,是看不到截圖中的那些HTML代碼的。而Python爬取動態頁面的方法之一,就是模擬瀏覽器去訪問這個頁面,然後獲得頁面的HTML後再進行解析。具體來說,需要用到Selenium、BeautifulSoup4。

pip install selenium beautifulsoup4

具體見下圖。


越來越多的javascript動態技術用在網頁上,用python編程時要選用合適的driver,直接驅動一個瀏覽器引擎,讓他解析網頁,執行動態腳本。python的包太多了,我正在建立一個開源python爬蟲,期望把這些過程梳理清楚


先監聽請求,發現是這個鏈接
/cnhp/life?IID=SERP.{0}IG={1}
/cnhp/life?IID=SERP.5044IG=A57C331E82D44479BBA57F5BF42349BA
出現的文字介紹,問題來了,這個IID和IG從哪裡來的?
只有strfind+debug找JavaScript相關代碼。
如圖:

如此便得知,IID位於源碼中的「&&」的data-ajaxiid值,而IG位於js對象_G對象的IG,恰好_G對象是html中的js存在的。
上圖:

沒時間解釋了,快上車~
py3:

import http.client
import re
import sys

httpClient = None
html_text=""
#print("####################http request start#####################")
try:
httpClient = http.client.HTTPConnection("cn.bing.com", 80, timeout=500)
httpClient.request("GET", "/",None,{"User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.101 Safari/537.36",
"Accept-Language":"h-CN,zh;q=0.8",
"Content-Type":"text/xml"
})
response = httpClient.getresponse()
#print(response.status,":",response.reason)
#print(response.read())
html_text=response.read()
html_text=html_text.decode("utf-8")#瑪德制杖還要解碼,
except Exception as e:
print(e)
sys.exit(0)
finally:
if httpClient:
httpClient.close()
#print("####################http response ok#####################")

try:
IID= re.findall("&

&


謝邀,用selenium+phantomjs可以解決。
#coding:utf-8
from selenium import webdriver
from bs4 import BeautifulSoup
import time

driver = webdriver.PhantomJS()
driver.get("http://cn.bing.com")
time.sleep(7)
html = driver.page_source
driver.close()

soup = BeautifulSoup(html,"lxml")
content = soup.find_all("div",id="hplaSnippet")
for item in content:
print item.string.encode("GB18030")


上次寫了一個爬蟲 保存bing上的圖片.
並寫了一個api
http://api.getlove.cn/img.html

明天找找爬蟲程序的代碼


附上一個沒什麼技術含量的項目吧
今天偶爾從stackoverflow上翻到了bing每日壁紙的api
手癢就花了半小時寫了個小東西
附上git
http://git.oschina.net/FedGk/BIng_daily_wallpaper


text = re.search("&(.+?)&", requests.get("http://cn.bing.com/cnhp/life").text, re.S).group(1)


EarlGrey的方法挺好的,雖然慢了點但是能節省不少腦細胞。。
剛開始我是分析javascript的,想解析javascript來獲取內容,搞了一兩個小時還沒搞出來(可能功力不夠:(),不過這個頁面也的確是不好分析,什麼變數,函數都是用a,b,c,d,,,k,,,表示,真是看得頭疼,應該就是為了防爬蟲才這樣的吧。。
所以這種靠腦子分析不出來的,就只直接用selenium吧!
selenium的使用參考selenium + python自動化測試環境搭建


推薦閱讀:

國內有什麼方便的圖床?

TAG:Python | 網頁 | 爬蟲計算機網路 |