【爬取二手车并将数据保存在数据库中】

爬取二手车并将数据保存在数据库中

  • 查看网页结构分析爬取步骤
  • 解密加密信息
    • 将密文解密代码:
  • 进行爬取:
    • 爬取函数
    • 写入解密文件函数和获取城市函数
    • 解密文件,返回正确字符串函数
    • 保存到数据库
  • 运行结果

查看网页结构分析爬取步骤

可以看出网页使用了一定的加密
在这里插入图片描述
找到城市所在的位置,为之后的城市循环提供方便
在这里插入图片描述

解密加密信息

在加密信息的class元素可以看到加密的文件名称
在这里插入图片描述
在source下面可以看到此文件 是一个woff文件
在这里插入图片描述
这个woff文件每天都会变化 我们可以在主页中的head下的style下面找到这个woff文件的url链接,此后我们爬取页面时每次都爬一下这个woff文件并且保存下来就可以避免数据错误
在这里插入图片描述

将密文解密代码:

    # 读取加密文件进行密令转换tf = TTFont("./trans.woff")# 可以打印看一下tf.getGlyphOrder()是什么东西num_list = tf.getGlyphOrder()[1:]num_dict = {"zero": 0, "one": 1, "two": 2,"three": 3, "four": 4, "five": 5,"six": 6, "seven": 7, "eight": 8,"nine": 9}albnum_list = [num_dict[i] for i in num_list]# 密令转换列表new_string = ''for i in old_str:if i.isdigit():char = albnum_list.index(int(i))new_string += str(char)else:new_string += ireturn new_string

进行爬取:

爬取函数

def spider_data(url,driver,conn,cur):# 访问汽车信息页面driver.get(url)li_list = driver.find_elements(By.XPATH,'//ul[@class = "row-fluid list-row js-car-list"]/li')print(li_list)print("开始获取每一个汽车的信息!")for li in li_list:# 如果这个页面不为空则进行trytry:# 找到汽车信息所在的位置car_info = str_tran(li.find_element(By.XPATH,"a/h3").text)car_year_mile = li.find_element(By.XPATH, "a/div[@class='mileage']/span").textcar_year = datetime.strptime(str_tran(car_year_mile).split("/")[0],"%Y年%m月").date()car_mile = re.match('(.*?)万',str_tran(car_year_mile).split("/")[1]).group(1)car_price_total = li.find_element(By.XPATH, "a/div[@class='tags-box']/div").textcar_price_total = re.match('(.+?)万',car_price_total).group(1)try: # 如果有首付价格则进行trycar_price_pyment = li.find_element(By.XPATH, "a//div[@class='down-payment']/div").textexcept Exception as e: # 没有首付价格 则首付价格等于车价car_price_pyment = car_price_totalprint(car_info,car_year,car_mile,car_price_total,car_price_pyment)# 保存到数据库中store_data(car_info,car_year,car_mile,car_price_total,car_price_pyment,conn,cur)# 页面为空则报告错误 接着下一个汽车信息的爬取except Exception as e:print('********************error****************')print('*********************广告*****************')

写入解密文件函数和获取城市函数

# 获取城市拼音 和 解密的信息列表
def get_city_name(driver):password_code = []city_code = []# 先访问一次页面driver.get('https://www.renrenche.com/hf/ershouche/p1')# 找到城市的标签所在位置div_list = driver.find_elements(By.XPATH,'//div[@class="area-city-letter"]/div')# 将城市的拼音全部保存到一个列表中for div in div_list:a_list = div.find_elements(By.XPATH,'a')for a in a_list:city_code.append(a.get_attribute('rrc-event-name'))# 找到密文所在htm中的位置在style中 获取style标签下的元素内容的方法如下url_str = driver.find_element(By.XPATH,'//style[1]').get_attribute('textContent')# 匹配获取woff加密文件的urlwoff_url = re.match('[\s\S]+?url\(\'(.*?.woff)\'', url_str).group(1)# 使用requests请求 将文件用二进制的方式保存下来response = requests.get(woff_url,headers={'user-agent': fake_useragent.UserAgent().random})re_cont = response.contentwith open('./trans.woff', 'wb') as fp:fp.write(re_cont)# 返回城市的拼音return city_code

解密文件,返回正确字符串函数

# 读取woff文件 然后进行将错误的字符串转化成为正确的字符串
def str_tran(old_str):# 读取加密文件进行密令转换tf = TTFont("./trans.woff")num_list = tf.getGlyphOrder()[1:]num_dict = {"zero": 0, "one": 1, "two": 2,"three": 3, "four": 4, "five": 5,"six": 6, "seven": 7, "eight": 8,"nine": 9}albnum_list = [num_dict[i] for i in num_list]# 密令转换列表new_string = ''for i in old_str:if i.isdigit():char = albnum_list.index(int(i))new_string += str(char)else:new_string += ireturn new_string

保存到数据库

def store_data(car_info,car_year,car_mile,car_price_total,car_price_pyment,conn,cur):number = 0insert_sql = f"insert into car_info() values({number},'{car_info}','{car_year}','{car_mile}','{car_price_total}','{car_price_pyment}')"try:cur.execute(insert_sql)except Exception as e:conn.rollback()conn.commit()print("插入数据库完成!")

运行结果

在这里插入图片描述
在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

阿里云磁盘在线扩容

我们从阿里云的控制面板中给硬盘扩容后结果发现我们的磁盘空间并没有改变 注意:本次操作是针对CentOS 7的 #使用df -h并没有发现我们的磁盘空间增加 #使用fdisk -l发现确实还有部分空间 运行df -h命令查看云盘分区大小。 以下示例返回分区&#xf…

一对多聊天室

多人聊天包 由于要先创建服务面板,接收客户端连接的信息,此代码使用顺序为先启动服务端,在启动客户端,服务端不用关,不然会报错。多运行几次客户端,实现单人聊天 创建服务面板 package yiduiduo;import j…

03DockerFile

03DockerFile 1.DockerFile的概念 用来构建docker​镜像的构建文件,由一系列参数和命令构成的脚本 大体总览: ​​ ‍ 1.构建过程 要遵循的规则: ​​ 2.执行流程 ‍ ‍ ‍ ‍ ‍ ‍ ‍ ‍ ‍ ‍ ‍ ‍ ‍ ‍ ‍ ‍ ‍ ‍ ‍ ‍

Python Authlib库:构建安全可靠的身份验证系统

更多资料获取 📚 个人网站:ipengtao.com 在现代应用程序中,安全性是至关重要的,特别是在处理用户身份验证时。Authlib库为Python开发者提供了一套强大的工具,用于简化和增强身份验证和授权流程。本文将深入探讨Authli…

HarmonyOS应用开发工具DevEco Studio安装与使用

语雀知识库地址:语雀HarmonyOS知识库 飞书知识库地址:飞书HarmonyOS知识库 知识库内容逐步完善中… 工欲善其事必先利其器,要编写HarmonyOS应用就需要用到官方提供的IDE工具来编写相应的代码。 在鸿蒙开发者官网,其提供了官方的开…

【Java用法】Hutool树结构工具-TreeUtil快速构建树形结构的两种方式 + 数据排序

Hutool树结构工具-TreeUtil快速构建树形结构的两种方式 数据排序 一、业务场景二、Hutool官网树结构工具2.1 介绍2.2 使用2.2.1 定义结构2.2.2 构建Tree2.2.3 自定义字段名 2.3 说明 三、具体的使用场景3.1 实现的效果3.2 业务代码3.3 实现自定义字段的排序 四、踩过的坑4.1 坑…

chfs,简单好用的局域网共享网盘

1. 网盘简介 2. 下载安装包 点击地址下载 3. 部署网盘 (1)创建文件夹 mkdir -p /opt/chfs/share /opt/chfs/logs share 共享文件夹,也就是存放文件的地方 logs 存放日志文件(2)上传压缩包到 /opt/chfs目录下…

Doris 编译报错 Error: flex version (2.5.37) must be greater than or equal to 2.6.0

Doris 编译过程报错 Error: flex version (2.5.37) must be greater than or equal to 2.6.0yum update flex 不生效 下载flex 安装包 https://github.com/westes/flex/releases解压 tar -xvf flex-2.6.4.tar

复杂gRPC之go调用go

1. 复杂的gRPC调用 我们使用了一个较为复杂的proto文件,这个文件的功能主要是用来定位的,详细内容可以看代码中的注解 syntax "proto3"; //指定生成的所属的package,方便调用 option go_package "./"; package route…

拼多多选品大作战:通过热词选利润赛道

相信很多人都听过一句话:找对了风口,猪都能飞起来。 我们电商人也应如此,从行业分析到选品都应快速跟上市场节奏。 今天就给大家分享一下如何通过热词来进行一个行业类目的分析与选择。 01 热词是什么 热词通常指的是热搜词和飙升词&#…

RFID在新能源工厂大放异彩

RFID在新能源工厂大放异彩 我国在十四五规划中提出了建设绿色低碳发展的目标,新能源产业成为了国家发展的重点领域之一,开始大力支持各种新能源厂商发展。各个厂商之间不仅比产品、比技术。也比生产想要降本增效,为了实现这一目标&#xff0…

CLion手把手教你创建Windows项目

作为一个Jetbrains迷的我,下载了Jetbrains全家桶,我就想用CLion 编写 Windows 项目 前提:必须安装 Visual Studio 2022 New Project 选择 C Executable,取好项目名, 点击 Create 在 CMakeList.txt 中添加以下内容&…