2016-04-03 31 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