我正在尝试使用硒和漂亮的汤报废网站

时间:2019-08-23 03:35:20

标签: python-3.x selenium web-scraping

我如何获取同一网站的每个列表页上提到的所有类别,即代码和标题,我试图通过硒来剪贴网站,并使用漂亮的汤来剪贴每一页

在这里,我尝试从网站上抓取每个页面,并将其作为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()

1 个答案:

答案 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模块.....)