德克萨斯州的刮削表查询

2024-05-15 11:52:00 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试在Texas RRC生产查询工具上从该查询中获取所有结果:

http://webapps2.rrc.texas.gov/EWA/productionQueryAction.do?pager.pageSize=10&pager.offset=10&methodToCall=search&searchArgs.paramValue=|1=Operator|2=01|3=2019|4=01|5=2019|8=production|9=Operator|10=13|101=Both|102=01|204=district&rrcActionMan=H4sIAAAAAAAAAMWQy07DMBBFv6ZsKkUeJ6nSxSxCgS1PwSLqwsQmsZTW0cThIfnjmTiVimi3iN31vHzvCSAEygACEC6I6rL21u0fatKV2GKYuo9GUd0uN2S9Iavi7Id5VX0_yIRXEm8-1ZA07n2RloXgvsSFvLl-KVmmk-zJ6TEevh8Nfc1_JNpxP8Od8a3TT26juo4LOY77oTe1fbNG87tAceKrGqKlkpoh6RWp3bPqRjPZxdvekPKOgkQBIUUpYB2ySeezLvDoJqyP8yAQ0pjt0vk2huAlyQa1HTzZ2v-yAQc8V4c2h1_yxl_TmaOzXMUgd6ox9APCWWKwrc7NRmCcEUEwKciyYiLFoCDLw4qrp2f-Bfw3Uvd3sqQCAAA

我已经编写了一个程序,它将遍历每个页面以获得所有结果,但是当我尝试实际从表中提取数据时,soup变量返回NoneType。我使用的是bs4.6。这就是我尝试过的:

current_url = driver.current_url
soup = BeautifulSoup(current_url,'lxml') #tried html.parser as well
table = soup.find("table", {"class":"DataGrid"})
for row in table.find_all('tr'):
    print(row)

我想在每一页上刮表,然后附加到一个数据帧。我是不是漏掉了什么明显的东西?你知道吗


Tags: 工具数据httpurltablecurrentfindoperator
2条回答

我用一个用户代理尝试了你的代码,结果成功了。我不确定您使用的是什么来向页面发出请求,因此我将假设您使用的是requests(因为selenium或其他web浏览器模拟是不必要的,一个简单的请求就可以做到这一点)。如果是,请在请求中添加以下参数:

headers={'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.75 Safari/537.36'}

编辑: 使用selenium,您只需将页面源代码传递给Beautifulsoup。您现在的错误是,您将url传递给beautifulsoup,而不是实际的html。你知道吗

from selenium import webdriver
from bs4 import BeautifulSoup

driver = webdriver.Chrome()
driver.get(
    'http://webapps2.rrc.texas.gov/EWA/productionQueryAction.do?pager.pageSize=10&pager.offset=10&methodToCall=search&searchArgs.paramValue=|1=Operator|2=01|3=2019|4=01|5=2019|8=production|9=Operator|10=13|101=Both|102=01|204=district&rrcActionMan=H4sIAAAAAAAAAMWQy07DMBBFv6ZsKkUeJ6nSxSxCgS1PwSLqwsQmsZTW0cThIfnjmTiVimi3iN31vHzvCSAEygACEC6I6rL21u0fatKV2GKYuo9GUd0uN2S9Iavi7Id5VX0_yIRXEm8-1ZA07n2RloXgvsSFvLl-KVmmk-zJ6TEevh8Nfc1_JNpxP8Od8a3TT26juo4LOY77oTe1fbNG87tAceKrGqKlkpoh6RWp3bPqRjPZxdvekPKOgkQBIUUpYB2ySeezLvDoJqyP8yAQ0pjt0vk2huAlyQa1HTzZ2v-yAQc8V4c2h1_yxl_TmaOzXMUgd6ox9APCWWKwrc7NRmCcEUEwKciyYiLFoCDLw4qrp2f-Bfw3Uvd3sqQCAAA')
html = driver.page_source
soup = BeautifulSoup(html, 'lxml')
print(soup)
table = soup.find("table", {"class": "DataGrid"})
for row in table.find_all('tr'):
    print(row)

因为您使用的是Selenium,所以我创建了一个逻辑来为给定的url刮取表值。我使用Csv从这个页面导出数据表。我相信这可以转换成熊猫数据帧。你知道吗

import csv

    csvFile = open('DataDetails.csv', 'w')
    writer = csv.writer(csvFile)
    link = 'http://webapps2.rrc.texas.gov/EWA/productionQueryAction.do?pager.pageSize=10&pager.offset=10&methodToCall=search&searchArgs.paramValue=|1=Operator|2=01|3=2019|4=01|5=2019|8=production|9=Operator|10=13|101=Both|102=01|204=district&rrcActionMan=H4sIAAAAAAAAAMWQy07DMBBFv6ZsKkUeJ6nSxSxCgS1PwSLqwsQmsZTW0cThIfnjmTiVimi3iN31vHzvCSAEygACEC6I6rL21u0fatKV2GKYuo9GUd0uN2S9Iavi7Id5VX0_yIRXEm8-1ZA07n2RloXgvsSFvLl-KVmmk-zJ6TEevh8Nfc1_JNpxP8Od8a3TT26juo4LOY77oTe1fbNG87tAceKrGqKlkpoh6RWp3bPqRjPZxdvekPKOgkQBIUUpYB2ySeezLvDoJqyP8yAQ0pjt0vk2huAlyQa1HTzZ2v-yAQc8V4c2h1_yxl_TmaOzXMUgd6ox9APCWWKwrc7NRmCcEUEwKciyYiLFoCDLw4qrp2f-Bfw3Uvd3sqQCAAA'
    wait = WebDriverWait(driver, 10)
    driver.set_page_load_timeout(10)
    driver.get(link)

    #Finding Table Headers
    Headers = driver.find_elements_by_xpath("//table[@class='DataGrid']//tr/td[@class='PagerBanner']/parent::tr/following::tr[1]//a")
    items = []
    for header in Headers:
        items.append(header.text)
    writer.writerow(items)


    for i in range(10): #Assuming table size is 10
        values = driver.find_elements_by_xpath("//table[@class='DataGrid']//tr/td[@class='PagerBanner']/parent::tr/following::tr[1]/following::tr["+str(i+1)+"]/td")
        rows=[]
        for value in values:
            rows.append(value.text)
        writer.writerow(rows)#writing row values

这是输出,

操作员姓名操作员编号石油(BBL)套管头(MCF)GW天然气(MCF)凝析油(BBL)

4 SWIFT服务有限责任公司953799 0 0

94工作,LP 966260 0

A&C石油有限责任公司214 329 0 0

A.N.MAC DIARMID公司572 108 0 0

AAA石油公司148 25 1 0 0

AARONMARK服务有限责任公司891 38 0 0

AB RESERVE有限责任公司893 0 0 0

ABACO公司894 0 0 4370 83

阿布拉克斯石油公司3125 9356 10706 0

雅阁GR能源公司3422 0 0 0

相关问题 更多 >