python爬取旅游攻略(1)

参考网址

https://blog.csdn.net/m0_61981943/article/details/131262987

  1. 导入相关库,用get请求方式请求网页方式:
import requests
import parsel
import csv
import time
import random
url = f'https://travel.qunar.com/travelbook/list.htm?page=1&order=hot_heat'
response = requests.get(url)

在这里插入图片描述

返回的 HTML 内容

html_data = response.text
print(html_data)

在这里插入图片描述

Selector类允许你创建一个对象,该对象可以用来从给定的 HTML 或 XML 文本中选择特定的元素。

selector = parsel.Selector(html_data)
print(selector)

在这里插入图片描述

selector.css(‘.li h2 a::attr(href)’):

  • selector是前面创建的parsel.Selector对象,它代表网页的 HTML 内容。
  • .css()是parsel.Selector对象的一个方法,用于使用 CSS 选择器语法来选择网页中的元素。
  • '.li h2 a’是 CSS 选择器表达式,它的含义是选择所有具有类名li的元素下的< h2 >标签内的< a >标签。这个选择器的目的是找到网页中特定位置的链接元素。
  • '::attr(href)'是一个 CSS 伪元素选择器,用于选择< a >标签的href属性。它的作用是提取这些链接元素的href属性值,也就是链接地址。
  • .getall():
    这是对前面选择结果的一个操作,用于获取所有满足选择条件的元素的href属性值,并以列表的形式返回。

所以,整行代码的作用是从网页的 HTML 内容中选择具有特定结构的链接元素,并提取它们的链接地址,存储在一个列表url_list中.

url_list = selector.css('.b_strategy_list li h2 a::attr(href)').getall()

在这里插入图片描述

保存到.csv文件里面

csv_qne = open('旅游攻略.csv', mode='a', encoding='utf-8', newline='')
csv_writer = csv.writer(csv_qne)
csv_writer.writerow(['地点', '标题', '出发时间', '天数', '人均消费', '人物', '玩法', '浏览量''点赞量' ,'作者'])
detail_id = detail_url.replace('/youji/', '')#字符串中移除/youji/部分
url_1 = 'https://travel.qunar.com/travelbook/note/' + detail_id#构建一个完整的 URL,并将其赋值给url_1。这个完整的 URL 很可能是指向旅游攻略详情页面的地址。
for detail_url in url_list:# 字符串的 替换方法detail_id = detail_url.replace('/youji/', '')#字符串中移除/youji/部分url_1 = 'https://travel.qunar.com/travelbook/note/' + detail_id#构建一个完整的 URL,并将其赋值给url_1。这个完整的 URL 很可能是指向旅游攻略详情页面的地址。print(url_1)response_1 = requests.get(url_1).textselector_1 = parsel.Selector(response_1)title = selector_1.css('.b_crumb_cont *:nth-child(3)::text').get().replace('旅游攻略', '')comment = selector_1.css('.title.white::text').get()date = selector_1.css('#js_mainleft > div.b_foreword > ul > li.f_item.when > p > span.data::text').get()days = selector_1.css('#js_mainleft > div.b_foreword > ul > li.f_item.howlong > p > span.data::text').get()money = selector_1.css('#js_mainleft > div.b_foreword > ul > li.f_item.howmuch > p > span.data::text').get()character = selector_1.css('#js_mainleft > div.b_foreword > ul > li.f_item.who > p > span.data::text').get()play_list = selector_1.css('#js_mainleft > div.b_foreword > ul > li.f_item.how > p > span.data span::text').getall()play = ' '.join(play_list)count = selector_1.css('.view_count::text').get()print(title, comment, date, days, money, character, play, count)

查找方法

右键检查,查看css字段

在这里插入图片描述

title = selector_1.css('.b_crumb_cont *:nth-child(3)::text').get().replace('旅游攻略', '')

在这里插入图片描述
在这里插入图片描述
右键复制js路径
同理爬取其他数据

一个简单的例子

import requests
import parsel
import csv
import time
import randomurl = f'https://travel.qunar.com/travelbook/list.htm?page=1&order=hot_heat'
response = requests.get(url)
#print(response)
html_data = response.text
#print(html_data)
selector = parsel.Selector(html_data)
#print(selector)
url_list = selector.css('.b_strategy_list li h2 a::attr(href)').getall()
#csv_writer.writerow(['地点', '作者','地点', '短评', '出发时间', '天数', '人均消费', '人物', '玩法', '浏览量', '点赞'])
#print(url_list)
for detail_url in url_list:detail_id = detail_url.replace('/youji/', '')#字符串中移除/youji/部分url_1 = 'https://travel.qunar.com/travelbook/note/' + detail_id#构建一个完整的 URL,并将其赋值给url_1。这个完整的 URL 很可能是指向旅游攻略详情页面的地址。print(url_1)response_1 = requests.get(url_1).textselector_1 = parsel.Selector(response_1)comment = selector_1.css('.title.white::text').get()# title = selector_1.css('.b_crumb_cont *:nth-child(3)::text').get().replace('旅游攻略', '')date= selector_1.css("#js_mainleft > div.b_foreword > ul > li.f_item.when > p > span.data::text").get()days=selector_1.css("#js_mainleft > div.b_foreword > ul > li.f_item.howlong > p > span.data::text").get()author = selector_1.css("body > div.qn_mainbox > div > div.left_bar > ul > li:nth-child(1) > p.user_info > span.intro > span.user_name > a::text").get()dianzan = selector_1.css("body > div.qn_mainbox > div > div.left_bar > ul > li:nth-child(1) > p.user_info > span.nums > span.icon_love > span::text").get()print( comment, date, days, author, dianzan)

在这里插入图片描述

如果数据不够:

import requests
import parsel
import csv
import time
import random# 基础URL
base_url = 'https://travel.qunar.com'
page_number = 1
data_count = 0# 打开CSV文件,准备写入数据
with open('去哪儿.csv', mode='a', encoding='utf-8', newline='') as csv_qne:csv_writer = csv.writer(csv_qne)csv_writer.writerow(['地点', '短评', '出发时间', '天数', '人均消费', '人物', '玩法', '浏览量'])while data_count < 100:url = f'https://travel.qunar.com/travelbook/list.htm?page={page_number}&order=hot_heat'# 发送请求获取页面内容response = requests.get(url)html_data = response.textselector = parsel.Selector(html_data)# 获取详情页URL列表url_list = selector.css('.b_strategy_list li h2 a::attr(href)').getall()for detail_url in url_list:# 获取详情页IDdetail_id = detail_url.replace('/youji/', '')url_1 = base_url + '/travelbook/note/' + detail_idprint(url_1)# 获取详情页内容response_1 = requests.get(url_1).textselector_1 = parsel.Selector(response_1)# 获取标题,添加错误处理title_element = selector_1.css('.b_crumb_cont *:nth-child(3)::text').get()if title_element:title = title_element.replace('旅游攻略', '')else:title = None# 获取短评,添加错误处理comment = selector_1.css('.title.white::text').get()# 获取出发时间,添加错误处理date = selector_1.css('#js_mainleft > div.b_foreword > ul > li.f_item.when > p > span.data::text').get()# 获取天数,添加错误处理days = selector_1.css('#js_mainleft > div.b_foreword > ul > li.f_item.howlong > p > span.data::text').get()# 获取人均消费,添加错误处理money = selector_1.css('#js_mainleft > div.b_foreword > ul > li.f_item.howmuch > p > span.data::text').get()# 获取人物,添加错误处理character = selector_1.css('#js_mainleft > div.b_foreword > ul > li.f_item.who > p > span.data::text').get()# 获取玩法,添加错误处理play_list = selector_1.css('#js_mainleft > div.b_foreword > ul > li.f_item.how > p > span.data span::text').getall()play = ' '.join(play_list) if play_list else None# 获取浏览量,添加错误处理count = selector_1.css('.view_count::text').get()print(title, comment, date, days, money, character, play, count)# 写入数据,如果有值为None则写入空字符串if data_count == 0:row_data = [title or 'Sample Location', comment or '', date or '', days or '', money or '', character or '', play or '', count or '']else:row_data = [title or '', comment or '', date or '', days or '', money or '', character or '', play or '', count or '']csv_writer.writerow(row_data)data_count += 1if data_count >= 100:break# 获取下一页页码信息page_links = selector.css("body > div.qn_mainbox > div > div.left_bar > div.b_paging a::attr(href)").getall()page_link_numbers = [page_link.split('=')[-1] for page_link in page_links]page_numbers = [int(number) for number in page_link_numbers if number.isdigit()]if page_numbers:max_page = max(page_numbers)if page_number < max_page:page_number += 1else:# 如果当前页是最后一页,重新从第一页开始继续获取数据,直到达到100条page_number = 1else:print("未找到页码信息,可能出现问题,继续尝试下一页")page_number += 1time.sleep(random.randint(1, 3))

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/5759.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

推荐一款便捷的图像处理工具:Photo Collage Maker

Photo Collage Maker是一款便捷的图像处理工具&#xff0c;能够对图像进行拼接和剪辑&#xff0c;帮助用户轻松实现各类图像效果的添加。该软件支持图片框的添加以及图片分享功能&#xff0c;适合用于制作照片拼贴、个性化相册、美丽的剪贴簿等创意项目。 软件特点 简单易用 …

yolo v5 开源项目

项目地址&#xff1a;https://gitcode.net/EricLee/yolo_v5

《化纤与纺织技术》是什么级别的期刊?是正规期刊吗?能评职称吗?

问题解答 问&#xff1a;《化纤与纺织技术》是不是核心期刊&#xff1f; 答&#xff1a;不是&#xff0c;是知网收录的第一批认定学术期刊。 问&#xff1a;《化纤与纺织技术》级别&#xff1f; 答&#xff1a;省级。主管单位&#xff1a;广东粤能&#xff08;集团&#xf…

Python 爬取大量数据如何并发抓取与性能优化

Python 并发抓取与性能优化 在进行网络爬虫开发时&#xff0c;爬取大量数据可能非常耗时。尤其是在处理许多网页或 API 请求时&#xff0c;逐个请求速度会非常慢。为了解决这个问题&#xff0c;我们可以通过并发抓取提高爬取效率。同时&#xff0c;通过性能优化来进一步减少耗…

Centos开机自启动脚本示例

本文建议创建一个sh文件管理自启动的各项内容&#xff0c;再将sh文件设置开机启动 在/root/autoshell下创建一个autostart.sh&#xff0c;内容如下 #!/bin/bash # description:开机自启脚本# 启动mongodb sh /root/software/mongodb-linux-x86_64-rhel70-4.0.6/bin/mongod --c…

猫头虎分享: AI设计利器 Recraft详解与基础使用教程

&#x1f981;猫头虎分享&#xff1a;AI设计利器 Recraft——全面解析与教程 大家好&#xff0c;我是猫头虎&#xff01;今天为大家带来一款非常炙手可热的 AI 设计工具 —— Recraft 的深度介绍与详细教程。这款工具自推出以来&#xff0c;就迅速获得了全球设计师的青睐。那么…

Spring AI : 让ChatGPT成为你构建应用的核心亮点

本文是一篇介绍spring ai的文章&#xff0c;主要介绍了生成文本内容&#xff0c;以及读取图片中内容两个能力。 之所以介绍这两个能力&#xff0c;是因为 大模型目前最适合做的事情有两个&#xff1a; 1&#xff09; 非结构化数据的结构化&#xff08;图片转文字&#xff0c;…

Qt(openCV的应用)

1. OpenCV简介 OpenCV&#xff08;Open Source Computer Vision Library&#xff09;是一个开源的计算机视觉库&#xff0c;它提供了丰富的图像处理和计算机视觉功能。该库由英特尔公司发起&#xff0c;并在 BSD 许可证下发布&#xff0c;因此它是免费的&#xff0c;且开放源代…

Excel快速转换文档word工具

【注意事项&#xff1a;】 1、目前支持Win10/11 x64操作系统&#xff0c;已亲测可正常运行。 2、工具解压后在 \excel_docx\excel\目录中提供了转换前的标准模板“testcase.xlsx”&#xff0c;测试童鞋在使用Zentao、JIRA等测试工具导出excel&#xff08;.xlsx后缀&#xff0…

uniapp 集成 uview

注意&#xff1a;HBuildX新建项目时必须选择vue2版本&#xff0c;vue3会不支持uview 下载安装方式&#xff1a; uview安装网站&#xff1a;uView2.0重磅发布&#xff0c;利剑出鞘&#xff0c;一统江湖 - DCloud 插件市场 配置&#xff1a; 1.安装sass插件 // 安装sass npm i …

想要搭建陪玩系统小程序,这几点不容忽视,陪玩系统源码框架

随着互联网经济的持续稳定发展&#xff0c;游戏市场的“封印”逐渐被打开&#xff0c;搭建陪玩平台成为一个新的热点。提起陪玩系统相信大家也不陌生&#xff0c;漫漫单排路如果有一个大神能带自己躺赢那是再好不过了&#xff0c;于是陪玩系统运营而生。想要搭建陪玩平台&#…

【论文笔记】Dense Connector for MLLMs

&#x1f34e;个人主页&#xff1a;小嗷犬的个人主页 &#x1f34a;个人网站&#xff1a;小嗷犬的技术小站 &#x1f96d;个人信条&#xff1a;为天地立心&#xff0c;为生民立命&#xff0c;为往圣继绝学&#xff0c;为万世开太平。 基本信息 标题: Dense Connector for MLLM…

[论文阅读]A Survey of Embodied Learning for Object-Centric Robotic Manipulation

Abstract --以对象为中心的机器人操纵的Embodied learning是体现人工智能中一个快速发展且具有挑战性的领域。它对于推进下一代智能机器人至关重要&#xff0c;最近引起了人们的极大兴趣。与数据驱动的机器学习方法不同&#xff0c;具身学习侧重于通过与环境的物理交互和感知反…

vscode的一些使用心得

问题1&#xff1a;/home目录空间有限 连接wsl或者remote的时候&#xff0c;会在另一端下载一个.vscode-server&#xff0c;vscode的插件都会安装进去&#xff0c;导致空间增加很多&#xff0c;可以选择更换这个文件的位置 参考&#xff1a;https://blog.csdn.net/weixin_4389…

Vue前端开发之自定义动画样式

在上一小节中&#xff0c;我们介绍了动画的实现源于6个类别样式&#xff0c;它们的名称默认前缀是一个“v”字母或者指定的名称&#xff0c;如“sc”&#xff0c;其实&#xff0c;也可以不使用这些固定的类别样式&#xff0c;开发者可以自定义任意的类别样式&#xff0c;供动画…

【709】基于SSM+vue的“萌宠小知识”网站设计与实现

摘 要 如今社会上各行各业&#xff0c;都喜欢用自己行业的专属软件工作&#xff0c;互联网发展到这个时候&#xff0c;人们已经发现离不开了互联网。新技术的产生&#xff0c;往往能解决一些老技术的弊端问题。因为传统萌宠小知识信息管理难度大&#xff0c;容错率低&#xff…

《机器学习by周志华》学习笔记-神经网络-05RBF径向基函数网络

1、背景 1988年,Broomhead和Lowe用径向基函数(Radialbasis function, RBF)提出分层网络的设计方法,从而将神经网络的设计与数值分析和线性适应滤波相挂钩。 2、概念 RBF(Radial Basis Function,径向基函数)网络是一种单隐层前馈神经网络,即该网络只有3层,输入层、隐含…

11.1组会汇报-基于区块链的安全多方计算研究现状与展望

基础知识 *1.背书&#xff0c;这个词源来自银行票据业务&#xff0c;是指票据转让时&#xff0c;原持有人在票据背面加盖自己的印鉴&#xff0c;证明该票据真实有效、如果有问题就可以找原持有人。 区块链中的背书就好理解了。可以简单的理解为验证交易并声明此交易合法&…

MSC“名实之辩”:精准鉴定只为精准治疗

前 言 MSC是一群来源广泛、能够体外增殖分化的异质性细胞。MSC具有免疫调节、促进组织修复等作用&#xff0c;应用于多种疾病的治疗。由于科学进程、习惯等原因&#xff0c;MSC具有多种名称。自先秦以来&#xff0c;就有“名实之辩”&#xff0c;今日我们就讲一讲MSC的名称与…

CST联合Isight进行天线DOE设计

本期我们转载一篇国外工程师Matthias MEIENHOFER&#xff0c;利用CST和Isight联合进行DOE设计的案例。 本文通过模拟设计一个双频带&#xff08;GSM和WLAN&#xff09;天线来研究天线的几何尺寸变化和性能的关系。如果我们改变天线里的某些宽度或长度参数&#xff0c;天线的性…