【问题标题】:How to open a list of links and scrape the text with Selenium如何使用 Selenium 打开链接列表并抓取文本
【发布时间】:2021-06-10 18:17:17
【问题描述】:

我是 Python 编程的新手,我想编写一个代码来使用 Selenium 从路透社的文章中抓取文本。我正在尝试打开文章链接,然后从文章中获取全文,但它不起作用。如果有人可以帮助我,我会很高兴。

article_links1 = []

for link in driver.find_elements_by_xpath("/html/body/div[4]/section[2]/div/div[1]/div[4]/div/div[3]/div[*]/div/h3/a"):
    links = link.get_attribute("href")
    article_links1.append(links)
    
article_links = article_links1[:5]

article_links

这是一个简短的文章列表,因此不需要很长时间就可以进行测试。它包含 5 个链接,这是输出:

['https://www.reuters.com/article/idUSKCN2DM21B',
 'https://www.reuters.com/article/idUSL2N2NS20U',
 'https://www.reuters.com/article/idUSKCN2DM20N',
 'https://www.reuters.com/article/idUSKCN2DM21W',
 'https://www.reuters.com/article/idUSL3N2NS2F7']

然后我尝试遍历链接并从段落中刮掉文本,但它不起作用。


for article in article_links:
    driver.switch_to.window(driver.window_handles[-1])
    driver.get(article)
    time.sleep(5)
    for article_text in driver.find_elements_by_xpath("/html/body/div[1]/div/div[4]/div[1]/article/div[1]/p[*]"):
        full_text.append(article_text.text)
        
full_text   

输出只是空列表:

[]

【问题讨论】:

    标签: python selenium-webdriver web-scraping


    【解决方案1】:

    您当前的代码存在几个问题。第一个是一个简单的修复。您需要缩进第二个 for 循环,以便它位于遍历每篇文章的 for 循环中。否则,在全文列表到达最后一篇文章之前,您不会向全文列表添加任何内容。它应该是这样的:

    for article in article_links:
        driver.switch_to.window(driver.window_handles[-1])
        driver.get(article)
        time.sleep(5)
        
        for article_text in driver.find_elements_by_xpath("/html/body/div[1]/div/div[4]/div[1]/article/div[1]/p[*]"):
            full_text.append(article_text.text)
    

    第二个问题在于您的 xpath。当 Xpath 由浏览器自动生成时,它可能会很长。 (我建议学习 CSS 选择器,非常简洁。学习 CSS 选择器的好地方叫做 CSS Diner。)

    我已将您的 find_elements_by_xpath() 函数更改为 find_elements_by_css_selector()。你可以看下面的例子。

    for article_text in driver.find_elements_by_css_selector("article p"):
        full_text.append(article_text.text)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-10-12
      • 2021-10-19
      • 2020-11-13
      • 2019-06-05
      • 2020-06-25
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多