我是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)
我该怎么办??你能帮忙吗? 我会很感激您能提供给我的所有信息。
答案 0 :(得分:0)
我会给您一些备忘单,以帮助您。
urllib
或requests
<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字符串无效{}
。您将在同一页面上发出很多请求