【发布时间】:2020-08-14 08:18:57
【问题描述】:
所以我正在努力尝试对https://data.bls.gov/cgi-bin/surveymost?bls 进行网络抓取,并能够弄清楚如何通过点击进行网络爬网以到达一张桌子。
我正在练习的选择是在您选择与“就业成本指数(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()
现在这只是查看标题。我也想获得表格内容。
如果我让 i = 0,它会产生“年”。 i = 1,它产生“期间”。但是,如果我选择 i = 2,我会得到两个变量,它们对于“估计值”和“标准误差”具有相同的 col2 id。
我试图想办法解决这个问题,但似乎无法得到我研究过的任何东西。
本质上,最好从我完成单击并位于感兴趣的表处开始,然后查看标题的 xpath 并为所有 sub 拉入文本。
<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>
我不知道该怎么做。我还尝试遍历 {i} 但显然与两个标题文本共享会导致问题。
一旦我能够获得标题,我就想获得内容。如果我走在正确的道路上,是否想得太多,或者是否有更简单的方法来完成所有这些,我可以让你了解一下。我正在学习,这是我第一次尝试使用 selenium 库进行点击。我只是想让它工作,这样我就可以在不同的桌子上再试一次,并使其尽可能自动化或可重复使用(通过调整)。
【问题讨论】:
-
刮还是刮?
-
[Edited] Scraping* 感谢您发现这一点,通过拼写错误并不是我寻求帮助的真正重点。 :)
标签: python html selenium-webdriver web-scraping beautifulsoup