我想把在这个网页上犯下的所有罪行都搜刮干净。我想刮的每一页都是"http://www.mylocalcrime.com/#“+邮政编码的格式。但是,无论是通过python还是在chrome上查看源代码,我都不会得到任何列出逮捕信息的数据。我得到了一个通用的网页,上面有每一种犯罪的图片和犯罪的标签。例如,消息来源会说(通过查看源代码可以看到这一点):li,<...>Vandalism,/li>,但是破坏行为不是犯罪,它只是一个一般的故意破坏行为的象征,其内容是破坏行为。
我尝试过使用一个漂亮的汤,我的代码基本上是:
import csv
from bs4 import BeautifulSoup
from lxml import html
import requests
csvloc = '.../.../filelocation.csv'
ziplist = [1001]
listofcrimes = []
#with open(csvloc,'r') as csvfile:
# ziplist = list(csv.reader(csvfile))
for each in ziplist:
zipcode = str(each).zfill(5)
page = requests.get('http://www.mylocalcrime.com/#'+zipcode)
tree = html.fromstring(page.content)
此请求返回泛型页的html文件。必须有办法这样做,因为当我使用桌面刮刀时,它会擦拭结果并提供Xpath: //tr50/td ([]从0到50)。不太了解Xpath,但我所读的源文件中没有tr。我会感谢你的帮助。
发布于 2017-01-29 17:46:38
再次关闭浏览器和加载页面中的JavaScript --您将看到空页。
页面上的所有数据都由JavaScript和AJAX添加。
lxml
和BS
不执行JavaScript,所以找不到这些数据。
您可以使用Selenium
(或类似的工具)来控制浏览器,浏览器将加载页面并运行JavaScript,然后您可以获得包含所有数据的HTML。
或者在Chrome/Firefox中使用DevTools
查看JavaScript使用什么url读取这些数据,然后可以使用requests
从这个url读取数据。JavaScript主要以JSON格式读取数据,这更容易搜索数据。
编辑:它使用API http://api.spotcrime.com获取数据。
它可能需要服务器http://spotcrime.com上的帐户和自己的private key
来获取数据。
来自http://www.mylocalcrime.com的示例链接,它以JSON的形式提供数据:
import requests
url = 'http://api.spotcrime.com/crimes.json?lat=0&lon=0&radius=0.04&key=privatekeyforspotcrimepublicusers-commercialuse-877.410.1607'
r = requests.get(url)
data = r.json()
crimes = data['crimes']
for x in crimes:
print(x['type'], x['date'])
结果:
Arrest 01/26/17 03:38 PM
Arrest 01/21/17 09:30 PM
Arrest 01/20/17 05:09 PM
Other 01/16/17 07:50 PM
Arrest 01/16/17 11:14 AM
Assault 01/15/17 07:59 AM
Arrest 01/12/17 02:27 PM
Assault 01/09/17 10:45 PM
Theft 01/09/17 12:33 PM
https://stackoverflow.com/questions/41927568
复制相似问题