2016-04-03 29 views
0

我想從下面提供的頁面上刮很多數據,當我檢查瀏覽器時,我看到一個路徑,但是,當我使用BeautifulSoup時,我可以不瞭解這些數據。例如,我在北京城後面的路上,但我會得到一個無。當我打印湯時,我可以看到html的格式非常不同(js我相信),並且美麗的輸入法無法處理,所以我可以選擇從該部分提取數據。謝謝。Beautifulsoup刮數據中有一個js文本在中間

from bs4 import BeautifulSoup,Tag 
import urllib2 
hdr = {'Accept': 'text/html,application/xhtml+xml,*/*',"user-agent":"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/48.0.2564.116 Safari/537.36"} 
url='https://www.upwork.com/freelancers/_~013dfabae39ba01678/' 
req=urllib2.Request(url,headers=hdr) 
html = urllib2.urlopen(req) 
soup=BeautifulSoup(html,"lxml") 
#when I inspect I see a path as follows, however printing the soup shows a txt/javascript.. 
locality=soup.find('span',{'itemprop':'locality'}) 

在beautifulsoup輸出的你會發現在這個SNIPPIT VAR phpVars的所有感興趣的數據中間:

<script type="text/javascript"> 
    // global Applet object 
    var Applet = new function() { 
     var basePath = '/freelancers'; 
     var phpVars = {"urchinId":"UA-62227314-1","csrfTokenCookieName":"XSRF-TOKEN","csrfTokenHeaderName":"X-Odesk-Csrf-Token","runtime_id":"0128305700c7dc55bb8","clientStatsDMetrics":true,"smfAjax":false,"userId":"424358860525125632","isVisitor":true, 
+0

此處粘貼示例數據。 – knh170

回答

0

你可以試試這個:

from bs4 import BeautifulSoup 
import urllib2 
import re 
import json 

hdr = {'Accept': 'text/html,application/xhtml+xml,*/*',"user-agent":"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/48.0.2564.116 Safari/537.36"} 
url='https://www.upwork.com/freelancers/_~013dfabae39ba01678/' 
req=urllib2.Request(url,headers=hdr) 
html = urllib2.urlopen(req) 
soup=BeautifulSoup(html,"lxml") 

script = soup.title.find_next('script').get_text() 
map_search = re.search('.*var phpVars = (\{.*);', script) 
mapData = map_search.group(1) 
mapDataObj = json.loads(mapData) 

print mapDataObj['profile']['profile']['location']['city'] 

它首先搜索後title並提取內容。

您感興趣的數據爲json格式,我們必須使用正則表達式從此腳本中提取json部分,並使用python json模塊解析它。

您終於可以通過名爲mapDataObj的字典訪問數據。

+0

啊傻我!!!!!!我沒有想到加載它作爲一個JSON!謝謝。爲了完整地回答我給出的問題,該行應該已經打印mapDataObj ['profile'] ['profile'] ['location'] ['city'] – FancyDolphin

+0

已更新我的回答。 – SLePort