【问题标题】:scrape website using python returns []使用 python 抓取网站返回 []
【发布时间】:2016-10-14 09:53:48
【问题描述】:

我正在尝试为以下 URL 构建一个简单的抓取:

http://www.bizjournals.com/milwaukee/datacenter/project-watch-what-is-being-built-in-milwaukee.html

我要做的是为地图上列出的所有项目建立一个电子表格:

  • 项目名称
  • Project Media(图片链接可以)
  • 项目说明

我尝试了以下代码,但即使我专门寻找一个值,我仍然没有返回任何数据(AKA []):

from lxml import html
import requests
page = requests.get('http://www.bizjournals.com/milwaukee/datacenter/project-watch-what-is-being-built-in-milwaukee.html')
tree = html.fromstring(page.content)
#This will create a list of project titles:
project = tree.xpath('//*[@id="m4n-0552-popup-1"]/div[2]/b')
print('Projects:', project)

我猜问题是每次我加载页面时 ID 都会发生变化(即 0552 更改为不同的 4 位值)。

有什么建议吗?

【问题讨论】:

  • 您是否尝试检查 page.content?打印出来看看有没有项目。
  • 我做到了。所有的项目都在那里,所以看起来应该是可能的。但是,根据 PyNEwbie 下面的回答,抓取似乎违反了他们的 TOS。
  • 解决4位ID变化问题的另一种方法是下载文件并从本地副本中提取数据。
  • @SweetBurlap 谢谢!这很有意义!

标签: python web-scraping beautifulsoup python-requests lxml


【解决方案1】:

如前所述,他们显然禁止在 TOS 中进行抓取。但是如果您向他们询问您的用例等,可能会很高兴。

出于学术兴趣 - 所有地图数据都来自 https://online.maps4news.com/ia/2.0/?id=351%2FBE9%2FB24870F6A499C237B88CB54F27 。您可以在 chrome 开发人员工具 > 网络 > xhr 中看到它加载它是一个带有弹出框内容和地图点的 json 响应

【讨论】:

  • 谢谢!这很有帮助!
【解决方案2】:

他们认为你是机器人,不允许你拉取内容

这里的关键教训 - 当你没有得到你期望的东西时,检查你得到了什么。

为了得到下面的文字,我只是把内容打印出来。

>>>import requests
>>>page = requests.get('http://www.bizjournals.com/milwaukee/datacenter/project-watch-what-is-being-built-in-milwaukee.html')
page_content = requests.content
>>>len(page_content) # here I am just trying to make sure I am not going to cause IDLE to freeze if page_content is unreasonably large
4319  # so the string that is the content is 4319 characters I am going to print 200 characters  (the rest is below)
>>>print page_content[0:200]
<!DOCTYPE html>
<html>






<head>
<title>Pardon Our Interruption</title>
<link rel="stylesheet" type="text/css"    href="//cdn.distilnetworks.com/css/distil.css" media="all">

我一直在检查来源,试图找出地图上的值来自哪里。我认为数据是 JSON,但似乎仍然无法确定这些数据是如何被调用并传递给浏览器的。我认为您将不得不定义一些标头以与您的请求一起发送。

我尝试了一些,但还没有成功。

请参阅此 SO 问题 How to use Python requests to fake a browser visit?

但是,我确实阅读了他们的使用规则,他们禁止抓取他们的内容。请参阅此链接http://acbj.com/privacy#V2

复制、收获、抓取、索引、抓取、蜘蛛、挖掘、收集、提取、编译、获取、聚合、捕获或存储任何内容,包括但不限于照片、图像、文本、音乐、音频、视频、播客、数据、软件、源代码或目标代码、算法、统计数据、分析、公式、索引、注册表、存储库或在服务上或通过服务可用的任何其他信息,包括通过自动或手动过程或其他方式,如果我们已采取措施禁止、禁止或阻止您这样做;

我认为我正在寻找一种获取数据的方法,但在阅读了上面的链接后停止了。

'\n\n\n \n \n \n \n\n\n 请原谅我们的打扰\n \n \n \n \n \n \n \n \n \n\n\n\ n \n \n \n \n \n \n

请原谅我们的打扰...

\n

\n 当您浏览 http://www.bizjournals.com 时,您的浏览器中的某些内容让我们认为您是机器人。有几个原因可能会发生这种情况:\n

\n
    \n
  • 你是一个超级用户,以超人的速度浏览这个网站。
  • \n 您已在网络浏览器中禁用 JavaScript。\n
  • Ghostery 或 NoScript 等第三方浏览器插件正在阻止 JavaScript 运行。此 http://ds.tl/help-third-party-plugins\' target=\'_blank\'>支持文章中提供了更多信息。
  • \n
\n

\ n 要请求解除阻止,请填写下面的表格,我们会尽快审核。\n

\n\n 忽略:忽略:忽略:忽略:\n \n 名字\n

【讨论】:

  • 好了!我对python(以及CSS/HTML之外的任何东西)都很陌生,所以我不知道我在做什么。非常感谢您对此进行调查!
猜你喜欢
  • 2022-12-09
  • 1970-01-01
  • 2020-09-28
  • 2016-05-27
  • 1970-01-01
  • 2021-12-04
  • 2020-10-07
  • 2012-07-07
  • 1970-01-01
相关资源
最近更新 更多