Scrapy 爬取旅游景点相关数据( 二 )
1 安装selenium
借助 selenium 可以使用浏览器来进行爬取数据,可以解决上一节遗留的翻页问题,首先介绍一下如何集成到scrapy环境中。
由于我使用的是macbook,因此以下都是使用macbook安装的过程
( 网络上很容易到wind
借助 selenium 可以使用浏览器来进行爬取数据,可以解决上一节遗留的翻页问题,首先介绍一下如何集成到scrapy环境中。
由于我使用的是macbook,因此以下都是使用macbook安装的过程
( 网络上很容易到windows安装selenium的例子,在此不做赘述 )
首先查看本地安装的chrome浏览器的版本,通过浏览器的设置 》 关于Chrome 可以查看到当前版本,例如目前我使用的版本是 126.0.xxx (arm64版本)
然后前往 https:///binary.html?path=chrome-for-testing/ 下载对应版本驱动,如果使用过低版本,可能出现无法调用问题。
下载好对应版本、对应架构的驱动后,执行操作:
# 先解压缩,然后移动到 /usr/local/bin
mv chromedriver /usr/local/bin
# 添加信任,让macos可以运行
xattr -d com.apple.quarantine /usr/local/bin/chromedriver
# 原先的程序中添加selenium
pip install selenium
在上一节的程序的基础上,添加一个spider名字叫 qiongyou_s.py
import scrapy
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditi as EC
from selenium.webdriver.support.ui import WebDriverWait
from selenium import webdriver
import time
class QiongyouSpider(scrapy.Spider):
name = qys
allowed_domains = [ qyer ]
start_urls = [ https://place.qyer/tokyo/sight/ ]
def __init__(self, *args, **kwargs):
super(QiongyouSpider, self).__init__(*args, **kwargs)
opti = webdriver.ChromeOpti()
# opti.binary_location = r/Users/teslatk/Documents/drivers/chromedriver
opti.add_argument( --headless )
self.driver = webdriver.Chrome(opti=opti) # 替换为 ChromeDriver 的实际路径
def start_requests(self):
for url in self.start_urls:
yield scrapy.Request(url=url, callback=self.parse)
def parse(self, respe):
# 定义对网站的操作(保存HTML)
self.driver.get(respe.url)
# 等待页面加载
WebDriverWait(self.driver, 10).until(
EC.presence_of_element_located((By.XPATH, //ul[@id=poiLists] ))
)
page_number = 1
while True:
# 保存当前页面 HTML
page_source = self.driver.page_source
filename = f page_{page_number}.html
with open(filename, w , encoding= utf-8 ) as f:
f.write(page_source)
self.log(f Saved {filename} )
# 解析当前页面内容(如果需要解析,可以在这里添加解析逻辑)
# 查并点击 下一页 按钮
try:
# next_button = self.driver.find_element(By.XPATH, //a[@title=下一页] )
# next_()
next_button = self.driver.find_element(By.XPATH, //a[@title=下一页] )
self.driver.execute_script(arguments[0].click();, next_button)
page_number = 1
time.sleep(2) # 等待页面加载
WebDriverWait(self.driver, 10).until(
EC.presence_of_element_located((By.XPATH, //ul[@id=poiLists] ))
)
except Exception as e:
self.log(fo more pages or failed to load next page: {e})
break
self.driver.quit()
scrapy crawl qys
4.1 翻页问题
值得注意的是,原先程序在执行到第4页的时候提示无法爬取更多页面,因为下一页的按钮在某一个像素点无法点击了,原因可能是页面上的浮窗或者其他内容遮挡住了这个标签,可以修改为使用javascript的方式点击下一页按钮。
# javascript 点击按钮
next_button = self.driver.find_element(By.XPATH, //a[@title=下一页] )
self.driver.execute_script(arguments[0].click();, next_button)
已经可以轻松爬取40多页的景点信息了,下一节我们去解析景点的具体内容!
#感谢您对电脑配置推荐网 - 最新i3 i5 i7组装电脑配置单推荐报价格的认可,转载请说明来源于"电脑配置推荐网 - 最新i3 i5 i7组装电脑配置单推荐报价格
上传时间: 2025-07-17 09:22:57
推荐阅读
留言与评论(共有 12 条评论) |
本站网友 正确的提肛运动图解 | 3分钟前 发表 |
*args | |
本站网友 雾霾经济 | 17分钟前 发表 |
下载好对应版本 | |
本站网友 远洋风景户型图 | 17分钟前 发表 |
*args | |
本站网友 修行太虚 | 4分钟前 发表 |
对应架构的驱动后,执行操作 | |
本站网友 自制太阳能热水器 | 24分钟前 发表 |
1 安装selenium 借助 selenium 可以使用浏览器来进行爬取数据,可以解决上一节遗留的翻页问题,首先介绍一下如何集成到scrapy环境中 | |
本站网友 北京婚纱摄影前十名 | 8分钟前 发表 |
//place.qyer/tokyo/sight/ ] def __init__(self | |
本站网友 花都花果山公园 | 0秒前 发表 |
//a[@title=下一页] ) self.driver.execute_script(arguments[0].click(); | |
本站网友 安卓手机运行慢 | 19分钟前 发表 |
f.write(page_source) self.log(f Saved {filename} ) # 解析当前页面内容(如果需要解析,可以在这里添加解析逻辑) # 查并点击 下一页 按钮 try | |
本站网友 陈湘宇 | 16分钟前 发表 |
对应架构的驱动后,执行操作 | |
本站网友 无锡男科医院 | 5分钟前 发表 |
//a[@title=下一页] ) self.driver.execute_script(arguments[0].click(); | |
本站网友 宫颈炎预防 | 18分钟前 发表 |
encoding= utf-8 ) as f |