【问题标题】:urllib2 is not pulling in the right data from a website Python 2.7urllib2 没有从网站 Python 2.7 中提取正确的数据
【发布时间】:2016-04-02 06:47:23
【问题描述】:

我正在尝试查看是否可以使用以下代码提取数据。出于某种原因,beautifulsoup 打印输出不包含我看到的数据。我想知道我哪里出错了。我一直在尝试不同类型的标题,这是我认为我的问题所在,但我可能错了。例如,当我在浏览器上检查页面时,我无法找到以下路径:<div class="textbold font-medium ng-binding">$25,000</div>

import urllib2
from bs4 import BeautifulSoup
url='https://www.prosper.com/listings#/detail/4964721'
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"}
req=urllib2.Request(url,headers=hdr)
html = urllib2.urlopen(req)
soup=BeautifulSoup(html,"lxml")
print soup

【问题讨论】:

  • 您能分享您看到的数据以及您应该看到的数据吗?
  • 它很大,但你可以在浏览器上看到页面,然后使用我提供的代码打印出页面,你会发现它们不是一回事。我提供了一个小例子,如果这还不够,请告诉我。
  • 大部分页面似乎是由 JavaScript 代码生成的,在浏览器中解释。但是 BeautifulSoup 没有 JavaScript 引擎。例如,您可以尝试使用 Selenium。见stackoverflow.com/questions/2148493/…
  • @mzjn 我试图远离 Selenium 主要是因为即使使用无头浏览器也很慢。但如果这是唯一的方式,我会不情愿地承认。
  • @mzjn 对我来说,似乎发生了刷新,第一次访问网站时它没有数据,然后浏览器刷新并提供数据,这可能不是javascript问题

标签: python beautifulsoup urllib2


【解决方案1】:

url 响应必须像这样读取

html = urllib2.urlopen(req).read()

根据您的示例,您似乎正在寻找呈现的 html。

在您的情况下,向

发出 ajax 请求

"https://www.prosper.com/listings/search?options=%7B%22listing_number%22:4964721,%22resp_fields%22:%22BROWSE_LISTING%22,%22orderservice_call%22:%22Y%22%7D"

对这个 ajax 请求的响应是一个 json,它会被渲染到 UI。

【讨论】:

  • 我认为这不是问题或必然是问题,您仍然无法获得我展示的示例。
  • 对“prosper.com/listings/…”的 ajax 请求在页面加载时执行。
  • a) 喜欢那个回复,你是怎么找到那个 ajax 请求的? b)你认为我可以用它来避免硒吗? (C) 谢谢你
  • a) Firebug 来救援。 b)我认为 Selenium 是我知道的唯一选择。 c) 不客气。
猜你喜欢
  • 1970-01-01
  • 2012-12-05
  • 2014-01-12
  • 1970-01-01
  • 2014-11-11
  • 1970-01-01
  • 1970-01-01
  • 2017-01-23
  • 2013-12-22
相关资源
最近更新 更多