使用python解析带有“加载更多”按钮的网页

时间:2019-12-29 09:01:45

标签: python parsing selenium-webdriver

我正在尝试从页面https://www.imdb.com/title/tt0114709/reviews?ref_=tt_ql_3中提取电影中的所有评论,但是其中一些隐藏在按钮“加载更多”的后面,我尝试使用硒来单击此按钮,但是它没有似乎没有用。这是我的代码和错误消息,如果有人对如何实现这一点有所了解。

h = httplib2.Http("./docs/.cache")
resp, content = h.request(url, "GET")
soup = bs4.BeautifulSoup(content, "html.parser")
divs = soup.find_all("div")
driver = webdriver.Chrome(executable_path='C:\Program Files\Intel\iCLS Client\chromedriver.exe')
driver.get(url)
html = driver.page_source.encode('utf-8')
while driver.find_elements_by_class_name("load-more-data"):
      driver.find_elements_by_name("Load More").click()


Traceback (most recent call last):
  File "C:/Users/demo/PycharmProjects/untitled/Extraction.py", line 567, in <module>
    Mat()
  File "C:/Users/demo/PycharmProjects/untitled/Extraction.py", line 518, in Mat
    dicoCam =testC.extract_data()
  File "C:/Users/demo/PycharmProjects/untitled/Extraction.py", line 368, in extract_data
    self.extract_comment(movie, url)
  File "C:/Users/demo/PycharmProjects/untitled/Extraction.py", line 469, in extract_comment
    driver.find_elements_by_name("Load More").click()
AttributeError: 'list' object has no attribute 'click'```

2 个答案:

答案 0 :(得分:0)

错误的原因是,您使用find_elements_by_name搜索它,但要小心元素 s ,因此它会返回一个列表,因为您要它查找多个元素。如果您想无限点击“加载更多”按钮,我建议:

while True:
    try:
        driver.find_element_by_class_name("load-more-data").click()
    except selenium.common.exceptions.ElementNotFoundException:
        break

我不确定类名是否正确,因为它们基于您的示例。我没有检查您提供的网页。如果不起作用,您可以更改我的代码。

答案 1 :(得分:0)

您会在错误消息中看到,这样做时会返回一个列表:

driver.find_elements_by_name("Load More")

这就是为什么我建议这样做:

driver.find_elements_by_name("Load More")[0].click()

您必须确保只有1个名为Load More的元素。

如果不是这种情况,请为每个元素将列表索引[0]加1

名为Load More

希望如此。

编辑:如果您仍然收到错误消息,例如list index out of range,则driver.find_elements_by_name()函数无法正常运行。

在使用Python处理互联网时,我不是专家, 但您应该寻找

类似的功能 driver.find_elements_by_innerhtml()driver.find_elements_by_text()

有这样的功能吗?