【发布时间】:2017-05-11 15:39:48
【问题描述】:
http://www.indymini.com/p/mini-marathon/miniresults
我想使用 python BS4 删除此 url 上可用的表,但是当我更改表大小或更改页面时,url 不会改变。
【问题讨论】:
标签: python html web-scraping page-numbering
http://www.indymini.com/p/mini-marathon/miniresults
我想使用 python BS4 删除此 url 上可用的表,但是当我更改表大小或更改页面时,url 不会改变。
【问题讨论】:
标签: python html web-scraping page-numbering
在表格中导航时,URL 不会改变,因为表格似乎是使用 javascript(特别是 DataTables 库)实现的 - 并使用 AJAX 来获取相关数据以显示。
所以,基本上,我看不出有一种方法可以在页面加载时使用 BS4 抓取页面并获取默认显示的数据以外的数据。
另一方面,由于使用 AJAX 检索数据,您可以尝试找出 AJAX 请求的格式(什么参数对您想要的结果执行什么操作,例如使用 Firebug)并检索数据通过调用提供数据表的 AJAX URL 直接采用 JSON 格式。
但是,根据您对数据的预期用途,您可能需要考虑向网站所有者请求下载和使用数据的权限。而且,谁知道呢?他们可能愿意提供帮助。
【讨论】:
它是一个通过 GET 发送到服务器的 ajax 调用,这里是 python 中快速而肮脏的报废代码
import requests,time
c=0
data=list()
for i in range(1,2278):
url='http://results.xacte.com/json/search?eventId=1387&callback=jQuery18309972286304579958_1494520029659&sEcho=8&iColumns=13&sColumns=&iDisplayStart='+str(c)+'&iDisplayLength=10&mDataProp_0=&mDataProp_1=bib&mDataProp_2=firstname&mDataProp_3=lastname&mDataProp_4=sex&mDataProp_5=age&mDataProp_6=city&mDataProp_7=state&mDataProp_8=country&mDataProp_9=&mDataProp_10=&mDataProp_11=&mDataProp_12=&sSearch=&bRegex=false&sSearch_0=&bRegex_0=false&bSearchable_0=false&sSearch_1=&bRegex_1=false&bSearchable_1=true&sSearch_2=&bRegex_2=false&bSearchable_2=true&sSearch_3=&bRegex_3=false&bSearchable_3=true&sSearch_4=&bRegex_4=false&bSearchable_4=true&sSearch_5=&bRegex_5=false&bSearchable_5=true&sSearch_6=&bRegex_6=false&bSearchable_6=true&sSearch_7=&bRegex_7=false&bSearchable_7=true&sSearch_8=&bRegex_8=false&bSearchable_8=true&sSearch_9=&bRegex_9=false&bSearchable_9=true&sSearch_10=&bRegex_10=false&bSearchable_10=true&sSearch_11=&bRegex_11=false&bSearchable_11=false&sSearch_12=&bRegex_12=false&bSearchable_12=false&iSortCol_0=0&sSortDir_0=asc&iSortingCols=1&bSortable_0=false&bSortable_1=true&bSortable_2=true&bSortable_3=true&bSortable_4=true&bSortable_5=true&bSortable_6=true&bSortable_7=true&bSortable_8=true&bSortable_9=false&bSortable_10=false&bSortable_11=false&bSortable_12=false&_='+str(time.time())
r=requests.get(url)
c+=1
print (r.text,'-------------',)
#do whatever you want to do with it, r.text will give the raw data.
【讨论】: