我正在尝试为以下网址构建一个简单的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位数值)。
有什么建议吗?
答案 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 \ n \ n \ n
\ n当您浏览时 { {3}} 关于您的浏览器的一些事情让我们认为您是一个机器人。可能会出现以下几种原因:\ 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响应