我正试着在网上搜罗谷歌酒店的名单。但是,我无法找到一种方法来绕过谷歌上的分页,因为URL实际上保持不变,只有一些内容发生了变化。请看下面的链接和截图 酒店名单都柏林在谷歌
我想知道在座的各位之前是否有人通过这个问题? 我已经成功地从第1页中抓取了数据,但是我需要对那里的每个页面都这样做 下面是我的当前代码。我已经把下一页的部分注释掉了,因为我不知道如何使它工作
from bs4 import BeautifulSoup
import requests
import sys
import csv
import pandas as pd
from lxml import html
url = f"https://www.google.com/travel/hotels?hrf=CgUIrAIQACIDRVVSKhYKBwjjDxAMGBMSBwjjDxAMGBQYASgAsAEAWAFoAZoBLhIGRHVibGluGiQweDQ4NjcwZTgwZWEyN2FjMmY6MHhhMDBjN2E5OTczMTcxYTCiARIKCC9tLzAyY2Z0EgZEdWJsaW6qAQoKAgghEgIIFRgBqgEWCgIIHBICCAcSAghREgIIRxICCDYYAaoBCgoCCCUSAgh3GAGqARIKAggREgIIKhICCDgSAggCGAGqARcKAgguEgIIPBICCDsSAwiBARICCCcYAaoBCgoCCFASAghPGAGqAQwKAwijARIDCKQBGAE&tcfs=EiwKCC9tLzAyY2Z0EgZEdWJsaW4aGAoKMjAxOS0xMi0xORIKMjAxOS0xMi0yMFIA&rp=aAFIAg&destination=Dublin&ap=MABoAA"
data = {
'name': [],
'star': [],
'rating': [],
'reviews': [],
'price': []
}
def export(data):
table = pd.DataFrame(data, columns=['name','rating','reviews','star','price'])
table.to_csv('Listings.csv', sep = ',', encoding = 'utf-8-sig', index=False)
def getHotel(hotel):
name = hotel.find(class_='BgYkof ogfYpf ykx2he').get_text()
star = hotel.find(class_='sSHqwe r10jJf').get_text()
rating = hotel.find(class_='sSHqwe').get_text()
reviews = hotel.find(class_='sSHqwe uTUoTb fOuaIb XLC8M').get_text()
price = hotel.find(class_='A9rngd wNqaKc idHpEf').get_text()
data['name'].append(name.strip())
data['star'].append(star.strip())
data['rating'].append(rating.strip())
data['reviews'].append(reviews.strip())
data['price'].append(price.strip())
export(data)
#def parse_page(url):
page = requests.get(url)
soup = BeautifulSoup(page.text, 'lxml')
hotels = soup.findAll(class_='f1dFQe')
for hotel in hotels:
getHotel(hotel)
# next_page_text = soup.find(class_='RveJvd snByac').text
# print(next_page_text)
# if next_page_text == 'Next':
# next_page_url = soup.find('a', class_='nextprev_on')['href']
# print(next_page_url)
# parse_page(url)
# else:
# export(data)
#parse_page(url)
下面是web页面上按钮的HTML屏幕截图
问题来源StackOverflow 地址:/questions/59383945/go-to-next-page-when-webscraping-google
您必须找到下一页的url,然后请求并解析它。看起来您已经注释掉了可以这样做的代码。问题是您依赖于混淆的类名。它们的元素可能会得到更一致的结果。最后,我有一个更好的和更易于管理的经验使用Scrapy。 就你的评论更新我的回答: 我注意到jsname被保留为一个分页:$('div[jsname="WUPT1e"]')获取按钮,但是谷歌故意以这样一种方式对它进行编码,这样就很难解析生成的URL。漂亮的Soup和请求库不与页面交互。您将需要一个可以与AJAX交互的无头web驱动程序。我建议通过代理运行第一个URL,以获取为下一页结果生成的URL,然后用漂亮的Soup和请求解析抓取的URL。 搜索“Scrapy”和“Selenium”应该会返回有帮助的结果。你可以这样开始:https://towardsdatascience.com/web- scraping-a-simple-wayto -start-scrapy-and- seleniumpart -i-10367164c6c0
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。