python - 无法使用请求从网页中获取所有表格内容
问题描述
我在 python 中创建了一个脚本来解析网站中的表格内容。我的脚本现在可以从它的登录页面解析内容。但是,NEXT PAGE
该页面底部有一个按钮,单击该按钮可展开 50 多个结果,依此类推。
我试过(刮掉前 50 个结果):
import requests
from bs4 import BeautifulSoup
site_link = 'https://indiarailinfo.com/trains/passenger/0/0/0/0'
res = requests.get(site_link)
soup = BeautifulSoup(res.text,"lxml")
for items in soup.select("div[style='line-height:20px;']"):
tds = [elem.get_text(strip=True) for elem in items.select("div")]
print(tds)
如何使用请求从该页面获取所有表格内容,用尽下一页按钮?
PS 我知道如何使用 selenium 展开内容,因此与任何浏览器模拟器相关的解决方案都不是我想要的。
解决方案
单击下一步按钮实际上是对https://indiarailinfo.com/trains/passenger/0/1?i=1&&kkk=1571329558457进行 XHR
<button class="nextbtn" onclick="javascript:getNextTrainListPageBare($(this).parent(),'/trains/passenger/0/1?i=1&');"><div>NEXT PAGE<br>the next 50 Trains will appear below</div></button>
因此,您所要做的就是在“onclick”下获取数据,编写一个 url 并使用请求进行 HTTP GET。
返回的数据将如下所示
现在只需使用 BeautifulSoup 并提取您需要的数据。
下面的代码(将 10 替换为您需要的数字)
import requests
from bs4 import BeautifulSoup
site_link = 'https://indiarailinfo.com/trains/passenger/0/{}'
for x in range(10):
url = site_link.format(x)
res = requests.get(url)
soup = BeautifulSoup(res.text,"lxml")
print('Data for url: {}'.format(url))
for items in soup.select("div[style='line-height:20px;']"):
tds = [elem.get_text(strip=True) for elem in items.select("div")]
print(tds)
推荐阅读
- laravel - 如何在刀片中执行嵌套的 foreach 循环?
- javascript - Store.Dispatch() 重置 Redux 存储
- arabic - 从右到左显示日期期间
- google-apps-script - 如何将一个单元格的内容添加到另一个单元格,然后自动删除原始单元格的内容?
- javascript - 如何制作由提及某些用户的人触发并警告触发用户的代码
- python - 使用 Python 的 Discord 机器人在 Visual Studio 中未解决的导入:BeautifulSoup 和 Requests
- c# - 在 C# 中从没有 JObject.Parse 的 JSON 中提取令牌/值
- xcode - 在 iOS 模拟器上 React Native `RuntimeError: abort(Error: xcrun exited with non-zero code: 2`
- python - 如何向熊猫数据框添加条件计数器
- python - Opencv真型字体反转和拆分阿拉伯字符