scrape网站使用python返回[]

时间:2016-06-13 20:51:29

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

我正在尝试为以下网址构建一个简单的scrape:

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

我要做的是通过以下方式构建地图上列出的所有项目的电子表格:

  • 项目名称
  • 项目媒体(图片链接很好)
  • 项目说明

我已经尝试了以下代码,但即使我专门寻找一个值,我仍然不会返回任何数据(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位数值)。

有什么建议吗?

2 个答案:

答案 0 :(得分:4)

他们认为你是一个机器人并且不允许你提取内容

这里的关键教训 - 当你没有达到预期目标时,检查你得到的东西。

要获取下面的文字,我只是把内容打印出来。

>>>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 0 \ n \ n \ n

请原谅我们的中断...

\ n

\ n当您浏览时 { {3}} 关于您的浏览器的一些事情让我们认为您是一个机器人。可能会出现以下几种原因:\ n

\ n
    \ n
  • 您是超级人力的高级用户。
  • \ n
  • 您已在网络浏览器中禁用了JavaScript。
  • \ n
  • 第三方浏览器插件(如Ghostery或NoScript)阻止JavaScript运行。有关更多信息,请参阅此http://ds.tl/help-third-party-plugins \'target = \'_ blank \'&gt;支持文章。
  • \ n
\ n

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

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

答案 1 :(得分:0)

如上所述,他们显然禁止在他们的服务条款中刮刮。但如果你向他们询问你的用例等,可能会很高兴。

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