DrissionPage是我发现的一个很好替代selenium的第三方模块,根据作者介绍,他的创建是想把selenium和requests这两种不同方向的python包结合在一起,所以也就有的DrissionPage
个人使用下来确实很好用,摆脱了下载驱动烦恼,DrissionPage可以控制基于Chromium的浏览器。
个人通过DrissionPage很轻松就爬取到了boss数据,代码不超过40行,具体代码我忘放哪里的,待到日后,补上。
下面我分享一个我通过DrissionPage使用了案例(DrissionPage自带requests的功能,但是作者还没有掌握),这个网站第一页的数据很好拿,就只需要加上一个headers,就可以拿取到数据,但是我始终没有发现他翻页的逻辑,所以作者就通过DrissionPage来实现翻页这个。
下面是具体代码
from DrissionPage import ChromiumPage # 导入ChromiumPage类,用于网页操作 import csv # 导入csv模块,用于文件操作 # 定义函数append_to_csv,将数据行添加到指定的CSV文件 def append_to_csv(row, filename="天气.csv"): with open(filename, mode='a', newline='', encoding='utf-8') as file: writer = csv.writer(file) writer.writerow(row) # 写入一行数据 # 初始化ChromiumPage对象 page = ChromiumPage() # 访问指定URL获取天气历史数据 page.get('https://tianqi.2345.com/wea_history/58259.htm') # 定义函数fetch_and_save_weather_data,用于抓取和保存天气数据 def fetch_and_save_weather_data(name): # 获取所有表格行元素 table_rows = page.eles("x:.//*[@class='history-table']//tr") headers = table_rows[0].eles("x:.//th//text()") append_to_csv(headers, f"{name}") print(headers) # 打印表头数据(用于调试) for row in table_rows[1:]: # 跳过表头,从第二行开始处理 # 获取当前行中所有单元格的文本 cell_texts = row.eles("x:.//td//text()") print(cell_texts) # 打印获取到的数据(用于调试) append_to_csv(cell_texts,f"{name}") # 将数据追加到CSV文件 # 点击“上一个月”按钮,加载前一个月的天气数据 page.ele("x:.//*[@class='history-btn']/a[@id='js_prevMonth']").click() # 循环执行数据抓取和保存操作,共执行10次,循环次数越多,获取的数据越多,循环一次,就是获取一个月的数据 for i in range(1, 2): fetch_and_save_weather_data(name=f"天气{i}.csv")