使用Selenium和Python的Review scrapeng循环重复第一个条目,而不是移动到下一个条目



我目前正在尝试自动从Tripadvisor获得评论(https://www.tripadvisor.com/Attraction_Review-g186338-d553603-Reviews-London_Eye-London_England.html)并使用Selenium和Python将它们保存到csv中。我遇到过这个代码,它适用于餐馆和酒店,但不适用于";要做的事情":https://bitbucket.org/devlobeslab/com.lobeslab.webseries.python/src/master/scraping/code/scraper.py

我已经修改了大部分代码,并设法将第一个数据条目存储在csv中,然后转到下一页。然而,对于每一页,第一个条目在csv中重复10次,然后程序移动到下一页,而不是浏览10个不同的评论。如果有人知道问题出在哪里,那将是非常有帮助的!

网站元素:

NEXT_BTN = (By.XPATH, "//a[@aria-label='Next page']")
REVIEW_LIST = (By.XPATH, "//div[@class='_1c8_1ITO']")
REVIEWS = (By.XPATH, "//div[@class='_1c8_1ITO']/div")
SCORE = (By.XPATH, "//div[@class='_1c8_1ITO']/div[1]/span/span/div[3]/*[local-name()='svg' and @class='zWXXYhVR' and contains(@title, 'bubbles')]")
DATE = (By.XPATH, "//div[@class='_3JxPDYSx']")
TITLE = (By.XPATH, "//div[@class='DrjyGw-P _1SRa-qNz _19gl_zL- _1z-B2F-n _2AAjjcx8']/span[1]")
REVIEW_TEXT = (By.XPATH, "//div[@class='DrjyGw-P _26S7gyB4 _2nPM5Opx']/span[@class='_2tsgCuqy']")
def find_element(find_from, element):
return find_from.find_element(element[0], element[1])

我也试着写"//div..表示SCORE、DATE、TITLE和REVIEW_TEXT,正如在类似问题的答案中所建议的那样,但不幸的是,这导致了";NoSuchElementException";。

环路:

# Load and get all reviews
time.sleep(3)
review_list = find_element(driver, REVIEW_LIST)
reviews = find_elements(review_list, REVIEWS)
print("[INFO]", len(reviews), "reviews found")
for review in reviews:
# Read the interesting review information
score_span = find_element(review, SCORE)
score = score_span.get_attribute("title")
date = find_element(review, DATE).text
title = find_element(review, TITLE).text
text = find_element(review, REVIEW_TEXT).text.replace("n", "")
# Save to CSV
csvWriter.writerow((score, date, title, text,))
print("[INFO] Page ready")
if curr_page == pages:
break
else:
next_page = find_element(driver, NEXT_BTN)
driver.get(next_page.get_attribute("href"))
curr_page += 1

网站HTML:结构的屏幕截图

谢谢!!

前面提到的问题是您的代码不是动态的。

您正在为"使用的xpath;评论";固定到第一个条目。我的建议是让您对xpath进行迭代。例如,在你共享的网页中,第一个条目有这个xpath

//*[@id="tab-data-qa-reviews-0"]/div/div[5]/div[1]

第二个有这个xpath

//*[@id="tab-data-qa-reviews-0"]/div/div[5]/div[2]

给出上面的内容,我们可以推断出您需要修改最后一个括号中的值,以便以您想要的方式迭代注释。

相关内容

最新更新