我正在尝试从页面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'```
答案 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()
。
有这样的功能吗?