我想把一些报道星链星座段落的页面合并在一起。现在,我需要手动访问每个页面,不能根据时间和可见性进行筛选
基本页面是https://heavens-above.com/StarlinkLaunchPasses.aspx?lat=50&lng=12&loc=Somewhere
Scrape peekyou.com ( having POST METHOD)给了我一些提示,但还不足以让我站起来
这是抓取第一页(最后一次Starlink启动)的GET代码:
import pandas as pd
import requests
from bs4 import BeautifulSoup
res = requests.get(r"https://heavens-above.com/StarlinkLaunchPasses.aspx?lat=45.61&lng=15.312&loc=Somewhere&alt=0&tz=CET")
soup = BeautifulSoup(res.content, 'lxml')
table = str(soup.find_all("table", {"class": "standardTable"}))
df = pd.read_html(table)[0]
cols = "date satellite mag s_time s_altitude s_azimuth h_time h_altitude h_azimuth e_time e_altitude e_azimuth".split()
df.columns = cols
print(df)
单击下拉列表,通过POST方法请求其他页面。这里停止我的(肤浅的)网络刮知识
我看到返回的res.text
包含我可以用于下一个请求的表单数据,但我不知道如何提取它们:
<form name="aspnetForm" method="post" action="/StarlinkLaunchPasses.aspx?lat=48.55&lng=11.53&loc=Somewhere&alt=0&tz=CET" id="aspnetForm">
<input type="hidden" name="__VIEWSTATE" id="__VIEWSTATE" value="DprSo0lEG4wbQojWQ3ub7mILDflL+omP+KQ
.../>
...
<input type="hidden" name="__VIEWSTATEGENERATOR" id="__VIEWSTATEGENERATOR" value="9E5B71D1" />
<input type="hidden" name="utcOffset" id="utcOffset" value="7200000" />
...
<input type="hidden" name="ctl00$cph1$hidStartUtc" id="ctl00_cph1_hidStartUtc" value="637211090517289358" />
...
# and here is the dropdown list:
<select name="ctl00$cph1$ddlLaunches" id="ctl00_cph1_ddlLaunches">
<option selected="selected" value="2020019">Starlink 5, 18 March 2020 12:16</option>
<option value="2020012">Starlink 4, 17 February 2020 15:06</option>
<option value="2020006">Starlink 3, 29 January 2020 14:07</option>
<option value="2020001">Starlink 2, 07 January 2020 02:19</option>
<option value="2019074">Starlink 1, 11 November 2019 14:56</option>
<option value="2019029">Starlink 0, 24 May 2019 02:30</option>
</select>
你能帮我找到一个可能的解决办法吗
先谢谢你
这将模拟单击下一页,将代码放在
scrapy
蜘蛛scrapy docs中对于这样一个页面,您不需要使用
Scrapy
或Selenium
您可以使用
requests
、bs4
和pandas
实现您的目标现在,让我们把计划付诸实施:
1。我们将检查您的
browser
{a2}下的Network Monitor,看看更改日期后会发生什么如您所见,我们注意到已向 host 具有多个
Form data
问:为什么你的url呼叫没有得到响应 传递POST数据
答:因为
host
实际上设置了一个特定的日期,从drop down
到static
,这是18 March 2020 12:16
,一旦打开url就可以看到HTML
并搜索表来用Pandas
读取它,因为您可以在一次调用中完成!aspandas
有一个名为read_html
的函数,它将解析HTML
并将tables
作为列表为您读取。可以通过切片[]
在它们之间移动李>Python raw string treats backslash
()as a literal character
,在某些情况下需要将其传递给host
李>2。我们将查看
Form data
中的所有parameters
,丢弃空值""
,并检查哪个values
是filled
。现在如果我们刷新页面,我们会注意到有一些values
被更改了。因此,我们将检查HTML
源代码,看看是否可以找到这些values
正如您所看到的,我们在前面的
screen-shot
的这一部分中找到了parameters
和values
这里是}
drop-down
选项的important
部分的值,我们需要将它传递给这个parameter
{3。现在,我们需要通过维护},然后发出
session
对象发出GET
请求来解析url
并收集所有必需的parameters
{post
请求。而我们将用Pandas
阅读它Pandas
没有传递Form data
的选项,所以我们使用requests
并通过data=
传递Form data
,然后通过read_html
读取content
李>最后,我们将使用每个表的名称将其保存到
csv
文件中最终代码
相关问题 更多 >
编程相关推荐