网络爬虫之爬虫原理

**

image.png

爬虫概述 

        Python网络爬虫是利用Python编程语言编写的程序,通过互联网爬取特定网站的信息,并将其保存到本地计算机或数据库中。

"""
批量爬取各城市房价走势涨幅top10和跌幅top10
"""
​
from lxml import etree
import requests
​
​
HEADERS = {"user-agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/105.0.0.0 Safari/537.36"}
INDEX = "https://bj.fangjia.com/zoushi"
​
​
def process_index(url):"""首页处理@param url: url@return: 返回首页源代码"""res = requests.request("GET", url=url, headers=HEADERS)res.encoding = "utf-8"return res.text
​
​
def process_city(html):"""各城市首页url获取@param html: 源代码@return: 返回各城市名和url"""parse = etree.HTML(html)text = parse.xpath('//div[@class="tab_content"]/div')city_name = []city_url = []for i in text:city_name.extend(i.xpath("./a/text()"))city_url.extend(i.xpath("./a/@href"))city_info = dict(zip(city_name,city_url))return city_info
​
​
def process_trend(html):"""各城市小区涨跌top处理@param html: 网页源码@return: 各城市小区名,房价基本信息"""parse = etree.HTML(html)area = parse.xpath('//div[@class="trend trend03"]/div/div//tbody/tr')plot_name = []info = []for tr in area:plot_name.extend(tr.xpath("./td/a/text()"))plot_info = tr.xpath("./td/text()")base_info = ','.join(plot_info)info.append(base_info)plot_intend = dict(zip(plot_name,info))return plot_intend
​
​
​
if __name__ == '__main__':index_html = process_index(INDEX)city_dict = process_city(index_html)# 记录到文件中f = open('全国各城市房价小区涨跌top10_by_xpath.txt',"w", encoding="utf-8")# 批量获取各城市房价涨跌幅top10for city_name, city_url in city_dict.items():# 城市首页处理city_html = process_index(city_url)# 房价涨跌top10plot_intend = process_trend(city_html)if bool(plot_intend):for k,value in plot_intend.items():f.write(f"城市{city_name}----小区名--{k}---房价基本信息{value}\n")print(f"城市{city_name}----小区名{k}下载完毕....")else:f.write(f"城市{city_name}无涨幅小区top10\n")f.write(f"-------------------城市{city_name}分隔线--------------------------\n")f.close()

发起请求

         一般来说,对于不是接口返回的数据,爬虫首先要做的就是获取网页源代码,网页源代码中有我们需要的数据。

image.png

def process_index(url):"""首页处理@param url: url@return: 返回首页源代码"""res = requests.request("GET", url=url, headers=HEADERS)res.encoding = "utf-8"return res.text

以上片段代码就是获取首页源代码。

提取信息 

        获取网页源代码后,接下来就是分析网页源代码,从中提取我们想要的数据。 首先,最通用的方法便是采用正则表达式提取,这是一个万能的方法,但是在构造正则表达式时比较复杂且容易出错。另外,由于网页的结构有一定的规则,所以还有一些根据网页节点属性、CSS 选择器或 XPath 来提取网页信息的库,如 Beautiful Soup、pyquery、lxml 等。使用这些库,我们可以高效快速地从中提取网页信息,如节点的属性、文本值等。

def process_city(html):"""各城市首页url获取@param html: 源代码@return: 返回各城市名和url"""parse = etree.HTML(html)text = parse.xpath('//div[@class="tab_content"]/div')city_name = []city_url = []for i in text:city_name.extend(i.xpath("./a/text()"))city_url.extend(i.xpath("./a/@href"))city_info = dict(zip(city_name,city_url))return city_info
​
​
def process_trend(html):"""各城市小区涨跌top处理@param html: 网页源码@return: 各城市小区名,房价基本信息"""parse = etree.HTML(html)area = parse.xpath('//div[@class="trend trend03"]/div/div//tbody/tr')plot_name = []info = []for tr in area:plot_name.extend(tr.xpath("./td/a/text()"))plot_info = tr.xpath("./td/text()")base_info = ','.join(plot_info)info.append(base_info)plot_intend = dict(zip(plot_name,info))return plot_intend
​

以上代码就是通过Xpath方式获取我们想要的数据。

保存数据 

        提取信息后,我们一般会将提取到的数据保存到某处以便后续使用。这里保存形式有多种多样,如可以简单保存为 TXT 文本或 JSON 文本,也可以保存到数据库,如 MySQL 和 MongoDB 等。

if __name__ == '__main__':index_html = process_index(INDEX)city_dict = process_city(index_html)# 记录到文件中f = open('全国各城市房价小区涨跌top10_by_xpath.txt',"w", encoding="utf-8")# 批量获取各城市房价涨跌幅top10for city_name, city_url in city_dict.items():# 城市首页处理city_html = process_index(city_url)# 房价涨跌top10plot_intend = process_trend(city_html)if bool(plot_intend):for k,value in plot_intend.items():f.write(f"城市{city_name}----小区名--{k}---房价基本信息{value}\n")print(f"城市{city_name}----小区名{k}下载完毕....")else:f.write(f"城市{city_name}无涨幅小区top10\n")f.write(f"-------------------城市{city_name}分隔线--------------------------\n")f.close()

以上代码把获取的数据写入本地的.txt文件中。

image.png

Python网络爬虫的原理包括以下几个步骤:

  1. 发送HTTP请求:通过Python的requests库向目标网站发送HTTP请求,获取网页内容。

  2. 解析网页内容:使用Python的HTML解析库(如BeautifulSoup、lxml等)对网页内容进行解析,获取需要爬取的信息。

  3. 数据存储:将爬取到的数据存储到本地文件或数据库中,以备后续分析或应用。

  4. 遍历链接:使用Python的正则表达式或其他库解析网页中的链接,进一步遍历目标网站的其他页面,从而实现自动化爬取。

需要注意的是,在进行Python网络爬虫时,需要遵守网站的爬虫规则,以免侵犯网站的合法权益。此外,为了避免被反爬虫机制识别,还需要使用一些反反爬虫技术,如使用代理IP、设置请求头、限制爬虫频率等。

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

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

相关文章

通过本机端口映射VMware中虚拟机应用(例如同一局域网别人想远程连接你虚拟机中的数据库)

需要 虚拟机中安装一下达梦数据库,并且以后大家都连接你虚拟机中达梦数据库进行开发。。。。。。在不改动自己虚拟机配置,以及本地网卡任何配置的情况下如何解决?本虚拟机网络一直使用的NAT模式。 解决 找到NAT设置添加端口转发即可解决。…

高级IO—多路转接

🎬慕斯主页: 修仙—别有洞天 ♈️今日夜电波:Cupid - Twin Ver. (FIFTY FIFTY) - Sped Up Version 0:20━━━━━━️💟──────── 2:25 🔄 …

【FFmpeg】视频与图片互相转换 ( 视频与 JPG 静态图片互相转换 | 视频与 GIF 动态图片互相转换 )

文章目录 一、视频与 JPG 静态图片互相转换1、视频转静态图片2、视频转多张静态图片3、多张静态图片转视频 二、视频与 GIF 动态图片互相转换1、视频转成 GIF 动态图片2、 GIF 动态图片转成视频 一、视频与 JPG 静态图片互相转换 1、视频转静态图片 执行 ffmpeg -i input.mp4 …

《浪潮之巅》:时代的巨轮与公司的兴衰

《浪潮之巅》是一部引人深思的作品,作者吴军通过对AT&T等公司的兴衰历程的叙述,展现了在科技浪潮之巅,公司如何成长、兴盛,并最终可能面临困境或转型。读完这部作品,我对公司的发展、企业经营者的战略眼光以及硅谷…

保姆级银河麒麟V10高级服务器离线安装mysql5.7数据库

离线在银河麒麟高级操作系统v10安装mysql5.7 下载mysql5.7 MySQL :: Download MySQL Community Server (Archived Versions) 2、把下载好的包上传到服务器 3、解压 [root1-0001 ~]# cd /data/mysql[root1-0001 mysql]# tar -zxvf mysql-5.7.44-linux-glibc2.12-x86_64.tar.gz…

artifactory配置docker本地存储库

​一、概述 本地 Docker 存储库是我们部署和托管内部 Docker 镜像的位置。实际上,它是一个 Docker 注册表,能够托管的 Docker 镜像的集合。通过本地存储库,你可以保存、加载、共享和管理自己的 Docker 镜像,而无需依赖于外部的镜像…

Mac和VScode配置fortran

最近更换了mac电脑,其中需要重新配置各类软件平台和运行环境,最近把matlab、gmt、VScode、Endnote等软件全部进行了安装和配置。但是不得不说,mac系统对于经常编程的人来说还是非常友好的! 由于需要对地震位错的程序进行编译运行…

【继承和多态】

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一、pandas是什么?二、使用步骤 1.引入库2.读入数据总结 前言 提示:这里可以添加本文要记录的大概内容: 例如:…

KEITHLEY(吉时利)2440源测量单位(SMU)数字源表

KEITHLEY(吉时利)2440源测量单位(SMU)数字源表 主要特性 50W 时性能高达 5A / 40V0.012% 基本测量精度,具有 6 位分辨率10pA / 100nV 测量分辨率与 KickStart 软件结合使用美国2440吉时利keithley数字源表特点 2400系列提供宽动…

需求 分析

需求分析的任务 需求分析的任务 1、需求分析是软件定义时期的最后一个阶段,它的基本任务是准确地回答“系统必须做什么?”这个问题。 2、确定系统必须完成哪些工作,也就是对目标系统提出完整、准确、清晰、具体的要求。 3、系统分析员应该写出软件需求…

Xbox VR头盔即将推出,但它是Meta Quest的‘限量版’。

📳Xbox VR头盔即将推出,但它是Meta Quest的‘限量版’。 微软与Meta合作推出限量版Meta Quest VR头映射Xbox风格,可能是Meta Quest 3或未来版本的特别定制版,附带Xbox控制器。这一合作是Meta向第三方硬件制造商开放其Quest VR头盔…

小塔 | 时尚领域RFID应用,别人早你一步!

优衣库,作为知名服装品牌零售商,近年来在数字化转型的道路上取得了显著的成果。其中,RFID技术的应用成为了优衣库提升运营效率、优化客户体验以及实现精准营销的重要工具。 RFID助力时尚门店品牌升级 优衣库深知RFID技术的潜力,将…

计算机网络3——数据链路层3以太网的MAC层

文章目录 一、MAC 层的硬件地址1、介绍2、注意点3、定制标准 二、MAC 帧的格式1、结构2、工作原理3、其他 一、MAC 层的硬件地址 1、介绍 在局域网中,硬件地址又称为物理地址或 MAC地址(因为这种地址用在MAC帧中)。 大家知道,在所有计算机系统的设计中…

计算机视觉——两视图几何求解投影矩阵

上文我提到了通过图像匹配得到基本矩阵,接下来我们要接着求解投影矩阵。 计算投影矩阵思路 假设两个投影矩阵为规范化相机,因此采用基本矩阵进行恢复。在规范化相机下, P [ I ∣ 0 ] P[I|0] P[I∣0], P ′ [ M ∣ m ] P[M|m] P′[M∣m]。…

apache和IIS区别?内网本地服务器项目怎么让外网访问?

Apache和IIS是比较常用的搭建服务器的中间件,它们之间还是有一些区别差异的,下面就详细说说 Apache和IIS有哪些区别,以及如何利用快解析实现内网主机应用让外网访问。 首先说说apache和IIS最基本的区别。Apache运行的操作系统通常为Unix或Lin…

Mysql — 刷题知识点

一. 功能函数 1. 大小写转换 UCASE/LCASE (列名) LCASE是将内容转换为小写 UCASE将内容转换为大写 CASE是条件控制语句的关键字 二、join ... on 问题 1. right join ..on RIGHT JOIN 关键字会返回右表 (t2) 所有的行,即使在左表 (t1) 中没有匹配的行。或者更…

【每日刷题】Day22

【每日刷题】Day22 🥕个人主页:开敲🍉 🔥所属专栏:每日刷题🍍 🌼文章目录🌼 1. 1669. 合并两个链表 - 力扣(LeetCode) 2. 11. 盛最多水的容器 - 力扣&#…

回归用户本真的业务价值需求,聚焦成本优化与内核能力提升——专访云和恩墨张程伟、金毅...

数据库作为企业核心业务系统的重要基座,其技术架构和性能都将直接影响企业的运营效率与成本。在2024“数据技术嘉年华”大会现场,笔者采访到了云和恩墨本原数据的两位技术合伙人——MogDB数据库研发负责人张程伟、下一代原生HTAP企业级数据库研发负责人金…

NSQ消息队列---总结篇

架构 概念 nsqlookup:存储了nsqd的元数据和服务信息(endpoind),向消费者提供服务发现功能, 向nsqadmin提供数据查询功能。 nsqd: 是接收、队列和传送消息到客户端的守护进程。 nsqadmin:简单的管理界面,展示了topic, channel以及channel上的消费者,也…

【漏洞复现】号卡极团管理系统 index.php SQL注入漏洞

0x01 产品简介 号卡极团管理系统是一款专为号卡行业打造的管理系统,它具备一系列强大的功能,能够满足号卡行业推广人员在业务运营中的各类需求。 0x02 漏洞概述 号卡极团管理系统存在SQL注入漏洞,未授权的攻击者可以通过该漏洞获取数据库敏…