2015-04-17 51 views
2

我想从一个网页(链接下面)使用请求在Python中获取一些信息;然而,当我通过python的请求库进行连接时,我在浏览器中看到的HTML数据似乎并不存在。没有一个xpath查询返回任何信息。我能够使用其他网站的请求,如亚马逊(下面的网站实际上由亚马逊拥有,但我似乎无法从中获取任何信息)。使用Python请求库删除网页

url = 'http://www.myhabit.com/#page=d&dept=men&asin=B00R5TK3SS&cAsin=B00DNNZIIK&qid=aps-0QRWKNQG094M3PZKX5ST-1429238272673&sindex=0&discovery=search&ref=qd_men_sr_1_0' 
user_agent = {'User-agent': 'Mozilla/5.0'} 
page = requests.get(url, headers=user_agent) 
tree = html.fromstring(page.text) 
query = tree.xpath("//span[@id=ourPrice]/text()") 
+0

您的'url'不在引号内,因此它不是字符串。 – MattDMo

+2

它似乎在使用javascript和ajax加载产品说明。 – user3557327

+0

事实上,几乎所有的网站内容都是在javascript XHR调用下构建的。 – felipsmartins

回答

3

元素是使用JavaScript生成的,则可以使用selenium获取源,以获得无头的浏览与phantomjs结合起来:

url = 'http://www.myhabit.com/#page=d&dept=men&asin=B00R5TK3SS&cAsin=B00DNNZIIK&qid=aps-0QRWKNQG094M3PZKX5ST-1429238272673&sindex=0&discovery=search&ref=qd_men_sr_1_0' 

from selenium import webdriver 

browser = webdriver.PhantomJS() 
browser.get(url) 
_html = browser.page_source 

from bs4 import BeautifulSoup 

print(BeautifulSoup(_html).find("span",{"id":"ourPrice"}).text) 
$50 
+1

这太好了。我完全按照你的建议使用,除了我在phantomjs.exe浏览器中添加了一个可执行文件路径= webdriver.PhantomJS(executable_path = path)这似乎很适合大多数情况。但有时它会返回null,其他时间则为$ 50。什么可能导致不一致? – gtomg

+0

您可能需要添加一个等待。文档中有一些很好的示例http://selenium-python.readthedocs.org/en/latest/waits.html –

0

这里是代码,我怎么放弃一个表从一个网站。在那个网站中,他们没有在表格中定义id或class,所以你不需要放置任何东西。如果id或class表示只是使用html.xpath('// table [@ id = id_val]/tr')而不是html.xpath('// table/tr')

from lxml import etree 
import urllib 
web = urllib.urlopen("http://www.yourpage.com/") 
html = etree.HTML(web.read()) 
tr_nodes = html.xpath('//table/tr') 
td_content = [tr.xpath('td') for tr in tr_nodes if [td.text for td in tr.xpath('td')][2] == 'Chennai' or [td.text for td in tr.xpath('td')][2] == 'Across India' or 'Chennai' in [td.text for td in tr.xpath('td')][2].split('/') ] 
main_list = [] 
for i in td_content: 
    if i[5].text == 'Freshers' or 'Freshers' in i[5].text.split('/') or '0' in i[5].text.split(' '): 
     sub_list = [td.text for td in i] 
     sub_list.insert(6,'http://yourpage.com/%s'%i[6].xpath('a')[0].get('href')) 
     main_list.append(sub_list) 
print 'main_list',main_list