我如何获取同一网站的每个列表页上提到的所有类别,即代码和标题,我试图通过硒来剪贴网站,并使用漂亮的汤来剪贴每一页
在这里,我尝试从网站上抓取每个页面,并将其作为df1附加到数据框
df1 = pd.DataFrame(columns=['Code', 'Title'])
x = driver.get("https://www.unspsc.org/search-code/default.aspx?CSS=51%&Type=desc&SS%27=%27")
while True:
try:
soup = BeautifulSoup(x, 'lxml')
right_table = soup.find('table', id="dnn_ctr1535_UNSPSCSearch_gvDetailsSearchView")
#df = pd.read_html(str(right_table))[0]
df = pd.read_html(str(right_table))[0]
# Clean up the DataFrame
df = df[[0, 1]]
df.columns = df.iloc[0]
df = df[1:]
print(df)
df1.append(df, ignore_index = True)
WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//table[contains(@id, 'UNSPSCSearch_gvDetailsSearchView')]//tr[last()]//table//span//following::a[1]"))).click()
print("Clicked for next page")
except TimeoutException:
print("No more pages")
break
driver.quit()
答案 0 :(得分:0)
所以他的代码看起来有些不完整,尽管如果我正确的话,这部分看起来就像您在这里使用Selenium。
特别是以下几行:
x = driver.get("https://www.unspsc.org/search-code/default.aspx?CSS=51%&Type=desc&SS%27=%27")
这将在浏览器中打开网站。很好,但是稍后您尝试将此浏览器对象传递给BeautifulSoup,这不是很好,在这里:
soup = BeautifulSoup(x, 'lxml')
BeautifulSoup希望使用XHTML /网页源代码。
因此,在这种情况下,您可以通过 x -> x.page_source :从Selenium获取网页的源代码:
soup = BeautifulSoup(x.page_source, 'lxml')
(另外,我会考虑您是否真的需要使用Selenium?对网站的快速浏览可能只适用于纯Requests模块.....)