【问题标题】:Review scraping form tripadvisor查看抓取表单tripadvisor
【发布时间】:2017-01-04 12:33:37
【问题描述】:

我是 python3 网络抓取的新手。我想抓取迪拜所有酒店的评论,但问题是我只能抓取我在网址中描述的酒店评论。谁能告诉我如何在不隐式提供每家酒店的网址的情况下获得所有酒店评论?

import requests
from bs4 import BeautifulSoup


importurl = 'https://www.tripadvisor.com/Hotel_Review-g295424-d302778-Reviews-Roda_Al_Bustan_Dubai_Airport-Dubai_Emirate_of_Dubai.html'
r = requests.get(importurl)
soup = BeautifulSoup(r.content, "lxml")
 resultsoup = soup.find_all("p", {"class" : "partial_entry"})
#save the reviews to a test text file locally
for review in resultsoup:
review_list = review.get_text()
print(review_list)
with open('testreview.txt', 'w') as fid: 
    for review in resultsoup:
        review_list = review.get_text()
        fid.write(review_list)

【问题讨论】:

    标签: python python-3.x web-scraping beautifulsoup tripadvisor


    【解决方案1】:

    你应该找到所有酒店的索引页面,把所有的链接放到一个列表中,然后循环url列表来获取评论。

    import bs4, requests
    index_pages = ('http://www.tripadvisor.cn/Hotels-g295424-oa{}-Dubai_Emirate_of_Dubai-Hotels.html#ACCOM_OVERVIEW'.format(i) for i in range(0, 540, 30))
    urls = []
    with requests.session() as s:
        for index in index_pages:
            r = s.get(index)
            soup = bs4.BeautifulSoup(r.text, 'lxml')
            url_list = [i.get('href') for i in soup.select('.property_title')]
            urls.append(url_list)
    

    出来:

    len(urls): 540
    

    【讨论】:

    • 这不是酒店的完整列表,而是第一页的酒店:还有 18 页......
    • @Andersson 这是一个例子,如果你能得到1页,就用循环来得到18页。
    • 但是结果没有页面编号。 URL 始终是 http://www.tripadvisor.cn/Hotels-g295424-Dubai_Emirate_of_Dubai-Hotels.html,无论是哪一页:第 1 或第 19...
    • @Andersson 是的,我注意到,这个页面使用 JavaScript 来获取数据,很难使用请求来处理它。
    • @Andersson 完成!
    猜你喜欢
    • 1970-01-01
    • 2018-05-31
    • 1970-01-01
    • 2015-06-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多