当前位置: 首页 > 知识库问答 >
问题:

用beautifulsoup和selenium webdriver帮助网页刮板

江奕
2023-03-14

因此,我正在尝试webscrape https://data.bls.gov/cgi-bin/surveymost?bls,并且能够弄清楚如何通过点击进行webscrape以获得一个表。

我正在练习的选择是在您选择与薪酬下的“雇用成本指数(ECI)文职(未调整)-CIU1010000000000A”相关联的复选框之后,然后选择“检索数据”。

处理完这两个之后,将显示一个表。这就是我要刮的桌子。

下面是我现在拥有的代码。

请注意,您必须在我放置 的地方放置您自己的浏览器驱动程序路径。

from bs4 import BeautifulSoup
from urllib.request import urlopen
import pandas as pd
import numpy as np
import requests
import lxml.html as lh

from selenium import webdriver
url = "https://data.bls.gov/cgi-bin/surveymost?bls"
ChromeSource = r"<browser driver>"

# Open up a Chrome browser and navigate to web page.
options = webdriver.ChromeOptions()
options.add_argument('--ignore-certificate-errors')
options.add_argument('--incognito')
options.add_argument('--headless') # will run without opening browser.
driver = webdriver.Chrome(ChromeSource, chrome_options=options)
driver.get(url)

driver.find_element_by_xpath("//input[@type='checkbox' and @value = 'CIU1010000000000A']").click()
driver.find_element_by_xpath("//input[@type='Submit' and @value = 'Retrieve data']").click()

i = 2

def myTEST(i):
    xpath = '//*[@id="col' + str(i) + '"]'
    TEST = driver.find_elements_by_xpath(xpath)

    num_page_items = len(TEST)
    for i in range(num_page_items):
        print(TEST[i].text)
myTEST(i)

# Clean up (close browser once completed task).
driver.close() 
<tr> == $0
  <th id="col0"> Year </th>
  <th id="col1"> Period </th>
  <th id="col2">Estimated Value</th>
  <th id="col2">Standard Error</th>
<tr>

一旦我能够获得标题,我想要获得内容。我能告诉你我是不是走在正确的道路上,是不是想多了,或者有没有一个更简单的方法来做这一切。我正在学习,这是我第一次尝试使用selenium库进行点击。我只想让它工作,这样我就可以在另一个表上再试一次,使它尽可能自动化或可重用(通过调整)。

共有1个答案

齐学文
2023-03-14

实际上,您不需要selenium,您只需要跟踪post表单数据,并在post请求中应用相同的内容。

然后您可以轻松地使用pandas加载表。

import requests
import pandas as pd

data = {
    "series_id": "CIU1010000000000A",
    "survey": "bls"
}


def main(url):
    r = requests.post(url, data=data)
    df = pd.read_html(r.content)[1]
    print(df)


main("https://data.bls.gov/cgi-bin/surveymost")

说明:

注意:只要表不是通过JavaScript加载的,您就可以读取它。否则,您可以尝试跟踪XHR请求(请检查前面的回答),或者您可以使用SeleniumRequests_HTML来呈现JS,因为Requests是一个HTTP库,它不能为您呈现它。

 类似资料:
  • 嗨,我想刮与美丽的汤,但通常iframe src应该是一个html链接,这次我遇到一个wordpress URL,基本上是文件夹结构,导致PHP文件。 我在想有没有什么办法可以把那个文件里的桌子刮开? 当我检查Chrome中的元素时,表DIV标记存在,然而,当我用BeautifulSoup加载链接时,iframe中的内容就会消失(表)。 请帮忙

  • 我是一个相当新的时候,谈到这一点,我已经工作了几天的网页刮削现在。我一直在积极地试图避免问这个问题,但我真的被困住了。 我的问题 我当前定位的span循环的位置,每次运行“for product”循环时,它都会打印每个列表的所有价格。如果我把它放在这个循环之外,它要么打印列表中的第一个,要么打印列表中的最后一个。如何提取价格并将其打印在每个产品的旁边。 我知道我有很多未使用的进口产品。这些只是我尝

  • 我可以浏览此网站的第一页: http://ratings.food.gov.uk/enhanced-search/en-GB/^/伦敦/相关性/0/^/^/0/1/10 但我正试图通过使用网站分页中的“下一步”按钮来刮除网站上的所有其他页面。 我单击了Next按钮,可以看到第2页的参数从0/1/10更改为0/2/10,以此类推。 我已经看了分页代码,我可以看到分页在一个Div中 问题是,我仅使用以

  • 我需要从一个网站刮去内容(只是标题)。我做了一个页面,但我会需要做的网站上的所有页面。目前,我正在做以下工作: 我知道,当我移动到下一页时,url会发生如下变化: 我尝试使用next_page_url=base_url+next_page_partial构建一个递归函数,但它不会移动到下一页。 我遵循这个问题(和答案):移动到下一页使用BeautifulSoup刮刮 如果你需要更多的信息请告诉我。

  • 最近我一直在用Python和靓汤学习网页刮刮乐。然而,当我试图刮下下面的页面时,我遇到了一点麻烦: http://www.librarything.com/work/3203347 我想从页面上得到的数据是这本书的标签,但我找不到任何方法来获取数据,尽管我花了很多时间在网上拖网。 我试着在网上看了几本指南,但似乎没有一本奏效。我尝试将页面转换为XML和JSON,但仍然找不到数据。 我现在有点手足无

  • 问题内容: 如何检索网页链接并使用Python复制链接的URL地址? 问题答案: 这是在中使用类的一小段代码: