无法使用请求从网页获取所有表格内容

时间:2019-10-17 16:03:13

标签: python python-3.x web-scraping

我已经在python中创建了一个脚本来解析网站中的表格内容。现在,我的脚本可以解析其着陆页中的内容。但是,该页面底部有一个NEXT PAGE按钮,当您单击该按钮时,它会进一步显示50个结果。

Website address

我尝试过(刮擦前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,我知道如何使用硒来展现内容,所以我所追求的并不是与任何浏览器模拟器相关的解决方案。

1 个答案:

答案 0 :(得分:2)

点击下一步按钮实际上是对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&amp;');"><div>NEXT PAGE<br>the next 50 Trains will appear below</div></button>

因此,您要做的就是在“ onclick”下获取数据,编写一个网址,然后使用请求进行HTTP GET。

返回的数据将如下所示

https://pastebin.com/Nk0E5vHH

现在只需使用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)