从具有多个标签的网站中提取数据

时间:2019-09-26 06:54:47

标签: python html

我正在尝试从动态更新的网站(每隔几个小时左右)中提取数据,它是运输服务的网站,并且具有几个页面/选项卡。 到目前为止,无论我尝试什么,我所能做的就是只拉第一页。 所以我不能拉其他标签的数据。 代码:

from bs4 import BeautifulSoup, SoupStrainer
import requests
import pandas as pd

# For establishing connection
proxies = {'http': 'http:...'}
url = 'http://yit.maya-tour.co.il/yit-pass/Drop_Report.aspx?client_code=2660&coordinator_code=2669'

page = requests.get(url, proxies=proxies)
data = page.text
soup = BeautifulSoup(data, "lxml")

for link in soup.find_all('a'):
    print(link.get('href'))
    html = requests.get(url, proxies=proxies).text
    df_list = pd.read_html(html)
    df = df_list[1]
    df.to_csv('my data.csv')

我也尝试通过解析html源代码来做到这一点,但也只有第一页,有什么想法?

enter image description here

2 个答案:

答案 0 :(得分:0)

您应该提取首页的超链接并在代码中使用它(如果没有超链接,则将其他网址放在如下所示的循环中)

import pandas as pd

df_list = []
//call each page here. i assume you have page number at the end of main url
for p in range(1, n):
    url = 'http://yit.maya-tour.co.il/yit-pass/Drop_Report.aspx?client_code=2660&   coordinator_code=2669?pNumber=%d' %p
    df_list.append(pd.read_html(url)[0])

df = pd.concat(df_list)
print(df)
df.to_csv('my data.csv')

答案 1 :(得分:0)

每隔15秒,网页就会调用以下Javasscript代码:

function __doPostBack(eventTarget, eventArgument) {
    if (!theForm.onsubmit || (theForm.onsubmit() != false)) {
        theForm.__EVENTTARGET.value = eventTarget;
        theForm.__EVENTARGUMENT.value = eventArgument;
        theForm.submit();
    }
}

打开浏览器开发工具,并在此函数中添加一个断点。了解代码所提交的参数后,请使用requests(或其他http客户端)从python代码提交表单。