【问题标题】:Extracting user comments from news website从新闻网站中提取用户评论
【发布时间】:2016-08-16 09:08:32
【问题描述】:
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC


def wait(dr, x):
  element = WebDriverWait(dr, 50).until(
    EC.presence_of_all_elements_located((By.XPATH, x))
)
return element
from selenium import webdriver
browser = webdriver.Firefox()
browser.get("http://www.dinamalar.com/user_comments.asp? uid=14701&name=%E0%AE%A4%E0%AE%AE%E0%AE%BF%E0%AE%B4%E0%AF%8D%E0%AE%9A%E0%AF%86%E0%AE%B2%E0%AF%8D%E0%AE%B5%E0%AE%A9%E0%AF%8D")
for elem in wait(browser, '//*[@id="commsec"]/div[2]/div[1]'):
print elem.text

这是我需要提取所有 cmets http://www.dinamalar.com/user_comments.asp?uid=14701&name=%E0%AE%A4%E0%AE%AE%E0%AE%BF%E0%AE%B4%E0%AF%8D%E0%AE%9A%E0%AF%86%E0%AE%B2%E0%AF%8D%E0%AE%B5%E0%AE%A9%E0%AF%8D的链接

但是我的代码只提取了前 10 个 cmets。单击按钮后,将动态加载其他 10 个 cmets。如何使用 python selenium 提取所有这些 cmets

【问题讨论】:

    标签: python selenium selenium-webdriver web-scraping screen-scraping


    【解决方案1】:

    这个想法是寻找页面上存在多少“更多想法”元素。每次单击按钮并加载更多 cmets 时,就会出现一个“更多想法”红色按钮。实施:

    from selenium.common.exceptions import TimeoutException
    from selenium.webdriver.common.by import By
    from selenium.webdriver.support.ui import WebDriverWait
    from selenium.webdriver.support import expected_conditions as EC
    from selenium import webdriver
    
    
    browser = webdriver.Firefox()
    wait = WebDriverWait(browser, 10)
    browser.get("http://www.dinamalar.com/user_comments.asp?uid=14701&name=%E0%AE%A4%E0%AE%AE%E0%AE%BF%E0%AE%B4%E0%AF%8D%E0%AE%9A%E0%AF%86%E0%AE%B2%E0%AF%8D%E0%AE%B5%E0%AE%A9%E0%AF%8D")
    
    # initial wait for the page to load
    wait.until(EC.visibility_of_element_located((By.CSS_SELECTOR, ".morered")))
    
    pages = 1
    while True:
        browser.find_elements_by_css_selector(".morered")[-1].click()
    
        # wait for more "load more" buttons to be present
        try:
            wait.until(lambda browser: len(browser.find_elements_by_css_selector(".morered")) > pages)
        except TimeoutException:
            break  # no more data loaded, exit the loop
    
        print("Comments loaded: %d" % len(browser.find_elements_by_css_selector(".dateg")))
    
        pages += 1
    
    browser.close()
    

    请注意,我还删除了 URL 中的多余空间。

    【讨论】:

    • 谢谢,工作正常。我是初学者,所以如何获得 cmets
    • @VinayakumarR 我会在这里使用 XPath:comments = [element.text for element in browser.find_elements_by_xpath("//div[@class='boxcmt1']//a[@class='heading']/following-sibling::div")]。请测试。谢谢。
    • 将此行添加到现有代码后,显示警告 I/O 警告 Non ASCII found,但我尝试运行它,它显示错误
    • 这很好用 cmets = [element.text for element in browser.find_elements_by_xpath("//div[@class='boxcmt1']//a[@class='heading']")]但它返回 unicode
    • @VinayakumarR 当然,但 unicode 有什么问题?谢谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-02-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-20
    • 1970-01-01
    相关资源
    最近更新 更多