【爬虫】百度FengXiangBiao(完全爬虫卡住了,是爬虫+文本提取方式)

学习使用。爬虫有风险。使用需谨慎。切记切记。
参考链接:学习python爬虫—爬虫实践:爬取B站排行榜
都是排行榜反正


网页细节

按F12,打开控制台。前端就是这点好,非常直观。
找到排行的具体位置,如下图,这里是【top_rank_list-poi-card】
(所以百度方向标这里实际上是poi数据,刚刚在手机上操作了下,确实,点击某个具体的mall在地图显示的是一个点,不是aoi)
在这里插入图片描述

进一步细节找我需要的数据。一层一层拨开它的心。实际上我只需要名字。也就是绿色框框里的东西。
(问就是懒,一个rank少一二十个,多四五十个,不想一个个自己打)
在这里插入图片描述

综合分析可知,每一个mall都是在class为【top_rank_list-poi-card】的div标签中,
而需要的mall名字则是在【top_rank_list-poi-card-top】的div标签下,【top_rank_list-poi-card-top-right】的【top_rank_list-poi-card-top-right-name】的div标签


request爬取【暂停版】

百度方向标的链接:手机打开百度地图,输入百度风向标,然后分享链接,在电脑端打开就行(直接搜索搜不出来的)
https://ugc.map.baidu.com/cube/feed/bangdancollect?stbar_height=48&city_id=131&loc=&tab1=%E8%B4%AD%E7%89%A9&tab2=%E8%B4%AD%E7%89%A9%E4%B8%AD%E5%BF%83&district_index=%E5%85%A8%E5%9F%8E&shangquan_index=&ncpshare=yymap

从链接其实可以看出,诸如city_id=131,这个131是北京,后面具体每个分类tab有不同。
没用过百度地图API,应该是一样的对应方式
在这里插入图片描述

import json
import requests
from bs4 import BeautifulSoup

#返回服务器响应
def download_html(url, headers):
    # 发送请求,获取并返回响应
    res = requests.get(url, headers=headers)
    res.encoding = 'utf-8-sig'
    res = res.text.encode('utf-8-sig').decode('unicode_escape') #返回的res从ASCII转为unicode格式
    return res
    
#main function
def main():
    url = 'https://ugc.map.baidu.com/cube/feed/bangdancollect?'\
        'stbar_height=48&city_id=131&loc=&tab1=%E8%B4%AD%E7%89%A9&'\
        'tab2=%E8%B4%AD%E7%89%A9%E4%B8%AD%E5%BF%83'\
        '&district_index=%E5%85%A8%E5%9F%8E&shangquan_index=&ncpshare=yymap'

    headers = {
         'User-Agent': 'Mozilla/5.0 (Windows; U; Windows NT 6.1; en-us)'
                       'AppleWebKit/534.50 (KHTML, like Gecko)'
                       'Version/5.1 Safari/534.50'}   
    
    html = download_html(url, headers)
    print(html)
    print('***********************************************************')

if __name__ == '__main__':
    main()

注意了,直接用跑上面代码,html获得的信息,需要仔细找我们需要的信息
在这里插入图片描述
在这里插入图片描述
从上面的图可以知道,我们需要的信息实际上,是在“select_field”里面。
所以下面做的是完善代码,提取我们需要的信息。


好的那么问题又来了。
现在根据参考链接,定义一个新的函数parse_html用来解析html,在rank_list,我们是不会得到返回值的!!!

import json
import requests
from bs4 import BeautifulSoup

#返回服务器响应
def download_html(url, headers):
    # 发送请求,获取并返回响应
    res = requests.get(url, headers=headers)
    res.encoding = 'utf-8-sig'
    res = res.text.encode('utf-8-sig').decode('unicode_escape') #返回的res从ASCII转为unicode格式
    return res
    
#解析html,返回排行榜信息
def parse_html(html):
    soup=BeautifulSoup(html,'html.parser')
    rank_list = soup.find_all('.detail_info')  # 获取排行榜列表
    print(rank_list)
    
#main function
def main():
    url = 'https://ugc.map.baidu.com/cube/feed/bangdancollect?'\
        'stbar_height=48&city_id=131&loc=&tab1=%E8%B4%AD%E7%89%A9&'\
        'tab2=%E8%B4%AD%E7%89%A9%E4%B8%AD%E5%BF%83'\
        '&district_index=%E5%85%A8%E5%9F%8E&shangquan_index=&ncpshare=yymap'

    headers = {
         'User-Agent': 'Mozilla/5.0 (Windows; U; Windows NT 6.1; en-us)'
                       'AppleWebKit/534.50 (KHTML, like Gecko)'
                       'Version/5.1 Safari/534.50'}   
    
    html = download_html(url, headers)
    data_list = parse_html(html)
    print(html)
    print('***********************************************************')

if __name__ == '__main__':
    main()

为什么呢,因为

在这里插入图片描述
这里有个beautifulsoup的基础文档还可以:

CSDN博主MilkLeong:Beautiful Soup库入门(标签树、基本元素、遍历、输出)
https://blog.csdn.net/MilkLeong/article/details/106156193


转文档提取版

由前面的卡壳处可知,需要转JavaScript。这个我还没研究。山重水复疑无路,咱换种思路。
首先,把前面的内容转为文本。就是整个【window._smarty_page_data = {“filter_info”:{"cXXXXXX】。然后跑下面的代码

import re
import pandas as pd
import json

def extract_key_value_pairs(data):
    data = data.strip('{}')
    pairs = data.split(',')
    
    result = {}
    for pair in pairs:
        pattern = r'"([^"]+)":"([^"]+)"' #"key":"value"
        match = re.search(pattern, pair)
        if match:
            key = match.group(1)
            value = match.group(2)
#             print(key, value)
        else:
            continue
            print("Invalid key-value pair")
        result[key] = value
    return result

filepath=r"XXXXX.txt"
with open(filepath, "r") as file:
    contents=file.read()
    
    #regular expression
    pattern=re.compile('rank_list.+本市商业街榜')
    specific_content=pattern.findall(contents)
    
    #delete certain contents
    specific_content=str(specific_content)
    cleaned_text = specific_content.replace("['rank_list\":[", '')
    cleaned_text = cleaned_text.replace('],"title":"本市商业街榜\']', '')

#split individual mall infomation
single_mall = cleaned_text.split('},{')

#change the infomation to dataframe format
result_list = []
for mall in single_mall:
    key_value_pairs = extract_key_value_pairs(mall)
    result_list.append(key_value_pairs)
    print(result_list)

# 将结果列表转换为 JSON 格式
df=pd.DataFrame(result_list)
df
#     result_list.append(key_value_pairs)

最后获得我们想要的df格式
在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【如何成功加载 HuggingFace 数据集】不使用Colab,以ChnSentiCorp数据集为例

【如何成功加载 HuggingFace 数据集】不使用Colab,以ChnSentiCorp数据集为例 前置加载数据集尝试一:标准加载数据库代码尝试二:科学上网尝试三:把 Huggingface 的数据库下载到本地尝试3.5 创建 state.json彩蛋 前置 Huggingface …

找不到 配置管理器。sql server 2008 r2 在win10下

win10 打开sqlserver2008r2的SQL Server 配置管理器 ,通过开始程序中找不到“SQL Server 配置管理器”。去自己电脑上此目录找,“C:\Windows\SysWOW64\SQLServerManager10.msc”,直接运行此文件就可以调出“SQL Server 配置管理器”。 在win1…

c语言内存

程序是保存在硬盘中的,要载入内存才能运行,CPU也被设计为只能从内存中读取数据和指令。 对于CPU来说,内存仅仅是一个存放指令和数据的地方,并不能在内存中完成计算功能, 如:计算abc,必须将a,b,c都读取到CPU…

CodeMirror 对 XML 文档熟悉及元素控制自定义

CodeMirror 是一个网络代码编辑器组件。它可以在网站中用于实现支持多种编辑功能的文本输入字段,并具有丰富的编程接口以允许进一步扩展。 本文为 xml 格式的代码提示约束格式规范的自定义示例内容。 先看效果,如下: 官方 Demo 的完整代码如…

十八、Jenkins(centos7)执行接口自动化测试脚本,飞书推送测试结果消息

十八、Jenkins(centos7)执行接口自动化测试脚本,飞书推送测试结果消息 1.创建 Freestyle project 项目 2. 输入git仓库地址 https://gitee.com/HP_mojin/pytest_allure_request_20220811 3. 增加构建步骤-Execute shell(Jenkins…

怎样做好客户自助服务?

在当前高速发展的信息化时代,人们已经习惯了即时满足的方式。对于品牌来说,当客户遇到问题时,他们希望能够获得即时细致的解答。如果客户需要等待很长时间才能获取答案,他们的满意度就会降低。因此,企业是否提供客户自…

Java - 异常处理

异常介绍 对异常进行捕获,保证程序可以继续运行,提升程序的健壮性。 执行过程中所发生的异常时间可分为两大类: Error: Java虚拟机无法解决的严重问题。如:JVM系统内部错误,资源耗尽等严重情况。比如&…

mysql的一些练习题

1. 第1题 mysql> create database Market charset utf8; Query OK, 1 row affected (0.01 sec)第二题 mysql> use Market Database changed mysql> mysql> create table customers(-> c_num int(11) primary key auto_increment,-> c_name varchar(50),-&…

mac怎么把m4a转换成mp3?

mac怎么把m4a转换成mp3?大家都知道m4a是苹果公司专属的音频文件格式,因此它是可以直接在mac电脑上打开播放的,但这并不代表m4a音频文件可以在其他播放器或者播放设备上直接打开和使用,相信这个问题大家都遇到过,造成这…

黑马头条-day02

文章目录 前言一、文章列表加载1.1 需求分析1.2 表结构分析1.3 导入文章数据库1.4 实现思路1.5 接口定义1.6 功能实现 二、freemarker2.1 freemarker简介2.2 环境搭建&&快速入门2.2.1 创建测试工程 2.3 freemarker基础2.3.1 基础语法种类2.3.2 集合指令2.3.3 if指令2.3…

使用LiteSpeed缓存插件将WordPress优化到100%的得分

页面速度优化应该是每个网站所有者的首要任务,因为它直接影响WordPress SEO。此外,网站加载的时间越长,其跳出率就越高。这可能会阻止您产生转化并为您的网站带来流量。 使用正确的工具和配置,缓存您的网站可以显着提高其性能。因…

【Spark_BigData】期末复习考试——

复习题目 yarn框架中不包含的进程为 Yarn包括两个主要进程:资源管理器Resource-Manager,节点管理器Node-Manager。 Scheduler zookeeper spark SQL 前身 Shark 在Spark中,DataFrame是一种以RDD为基础的分布式数据集,类似于传统数据库中的二维表格。 HiveContext继承自SQLCon…

Jvisualvm内存模型剖析-JVM(五)

上篇文章代码讲解了tomcat加载以及gc回收流程。 Jvm内存模型剖析优化-JVM(四) Jvisualvm 我们可以编写如上代码,之后打开jvm自带的工具jvisualvm。 如果我们看visual不会明显变化,则可以修改睡眠参数,时间改小。 当…

Vue中的el-date-picker时间选择器的使用

1、value-format属性设置需要什么格式的时间 2、type类型选择datetime、date 年月日时分秒 <el-date-pickervalue-format"yyyy-MM-dd HH:mm:ss"v-model"excelRuleForm.startTime"type"datetime":placeholder"选择开始时间"> &…

【尚医通】vue3+ts前端项目开发笔记——项目分析

尚医通开发笔记 一、项目分析 项目在线地址&#xff1a;http://syt.atguigu.cn测试帐号&#xff1a;17720125002 首页 home header 全局组件布局 左&#xff1a;logo 、title中&#xff1a;初始隐藏 搜索框 公共组件显示条件&#xff1a;在页面滚动到页面内搜索框的位置显示…

爬虫入门04——requests库中的User-Agent请求头

import requests#定义请求的url url https://www.baidu.com/ #https://site.ip138.com/www.xicidaili.com/#发起get请求 res requests.get(url url)#获取响应结果#响应对象 print(res)#获取响应状态码 print(res.status_code)#获取响应数据 print(res.text) #返回的是字符…

mysql 关于用户的练习

环境&#xff1a; (1) 创建用户 create user account1localhost identified by oldpwd1; 授予权限&#xff1a; #给表授予权限 grant select,insert on Team.player to account1localhost identified by oldpwd1;#给info字段授予update权限 grant update(info) on Team.pl…

强化学习路径优化:基于Q-learning算法的机器人路径优化(MATLAB)

一、强化学习之Q-learning算法 Q-learning算法是强化学习算法中的一种&#xff0c;该算法主要包含&#xff1a;Agent、状态、动作、环境、回报和惩罚。Q-learning算法通过机器人与环境不断地交换信息&#xff0c;来实现自我学习。Q-learning算法中的Q表是机器人与环境交互后的…

综合实验---基于卷积神经网络的目标分类案例

文章目录 配置环境猫狗数据分类建模猫狗分类的实例基准模型猫狗分类的实例基准模型之数据增强问题回答 配置环境 ①首先打开 cmd&#xff0c;创建虚拟环境。 conda create -n tf1 python3.6如果报错&#xff1a;‘conda’ 不是内部或外部命令,也不是可运行的程序 或批处理文件…

C语言学习(三十五)---动态内存练习题与柔性数组

经过前面的内容&#xff0c;我们已经对动态内存的知识已经有了相当多了了解&#xff0c;今天我们再做几道有关动态内存的练习题&#xff0c;然后再介绍一下柔性数组&#xff0c;好了&#xff0c;话不多说&#xff0c;开整&#xff01;&#xff01;&#xff01; 动态内存练习题…