如何刮取多页和每页的不同项目?

时间:2019-08-15 09:51:58

标签: python beautifulsoup

我是python的初学者,仅几个星期就尝试进行我的网络抓取。 我需要使用Windows32上的beautifulsoup在tripadvisor上刮擦一间餐厅的多页内容。在每个页面中,我都需要填写餐厅名称,社交等级和美食/菜式,客户名称,日期评论,滴定度评论和评论。

我在python控制台中尝试了以下代码:

from urllib.request import urlopen as uReq
from bs4 import BeautifulSoup as soup

for i in range(260,1231):
    my_url = "https://www.tripadvisor.fr/Restaurant_Review-g187147-d6575305-Reviews-or260-Il_Etait_Un_Square-Paris_Ile_de_France.html".format(i)
    Inf_avis = uReq(my_url)
    page_html = Inf_avis.read()
    Inf_avis.close()
    page_soup = soup (page_html, "html.parser")
    restaurant = page_soup.findAll("div", {"id":"atf_header"})

在这里,Python不会粘贴(似乎已阻止?...)其他代码来获取有关餐厅的信息。

餐厅中的rest_info:

try:
    rest_name = restaurant.findAll("h1", {"class":"ui_header h1"})
    inf_rest_name = rest_name[0].text 
    econ_class_food= restaurant.findAll("div, {"class":"header_links"})
    rest_eclf = econ_class_food[0].text
    print(inf_rest_name, rest_eclf)

我该怎么办??你能帮忙吗? 我会很感激您能提供给我的所有信息。

1 个答案:

答案 0 :(得分:0)

我会给您一些备忘单,以帮助您。

  • 我建议使用一些现成的解决方案,例如Scrapy
  • 尝试避免使用同步的http客户端,例如urllibrequests
  • 检查是否不需要Js呈现您尝试加载的页面,例如,它可以是SPA或<script>标签中的数据存储,甚至Js都可以发出AJAX请求,等等。
  • 如果没有Js站点无法正常工作-转到开发者控制台->网络-> XHR并重新加载页面。在那里,您将看到所有AJAX请求。

    在您的情况下,由于Tripadvisor将所有数据都存储在html中,因此不需要。这是将为您提供信息的代码。 findAll是旧版本, find_all替代了它。为了避免这种rest_name[0].text,您可以只使用汤对象的find()函数。但我确实建议您为此使用更简单的解决方案,因为在完成搜寻器之前,必须完成许多工作。如果您有任何疑问,请随时

r = page_soup.select_one('div#atf_header')
rest_name = r.select_one('div.restaurantName h1').text
econ_class_food = [i.text for i in r.select('div.header_links a')]

UPD 1::这部分对您没有my_url = "https://www.tripadvisor.fr/Restaurant_Review-g187147-d6575305-Reviews-or260-Il_Etait_Un_Square-Paris_Ile_de_France.html".format(i)格式的url字符串无效{}。您将在同一页面上发出很多请求