爬虫案例(xpath)

爬取西安二手房数据(多线程版) 目前房源数据作为人们都经常讨论的话题,房源数据又分为新房和二手房,而二手房想对于新房来说,不管是价格还是其他方面,对于居住地不稳定的打工来来说都是一个不错的选择。可以将指定的子串替换为新的子串,也可以指定替换次数。说明:get_house_data()方法:该方法用于获取每个房屋的详细信息,包括房屋标题、总价、单价、关注人数、发布时间等,并将数据存储到一个字典中。需要获取所指定内容,比如首页中的关注人数和发布月份,还有详情页中的总价和单价以及小区的所在位置和基本信息的获取,这些都是需要获取的文本内容。 阅读详情

爬虫案例(某某二手房)

步骤

  • 请求模块
# 封装一个函数,用于将url处理成请求对象
def request_by(url,city,page):
    page_url = url%(city,page)
    # 请求头
    headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.86 Safari/537.36'}
    return request.Request(url=page_url,headers=headers)


# 封装一个函数,用于发起请求
def request_data(url,city_list):
    # 对citylist进行遍历
    for city in city_list:
        # 每个城市遍历100页
        for page in range(1,4):
            # 创建每个页面的请求对象
            req = request_by(url=url,city=city,page=page)
            # 发请求
            res = request.urlopen(req)
            print("正在请求城市%s的第%d页"%(city,page))
            sleep(1)
            yield res.read().decode("utf-8")

  • 解析模块
def analysis_data(data):
    for html in data:
        # 创建一个节点树
        html_tree = etree.HTML(html) # 这个函数用于将html字符串转化成html节点树
        # 解析出每一个房屋单元
        house_list = html_tree.xpath("//ul[@class='sellListContent']/li")
        for house in house_list:
            # 创建一个字典用于整合每一个房源的信息
            item = {}
            # title
            item["title"] = house.xpath(".//div[@class='title']/a/text()")[0]
            # 位置
            item["position"] = "".join(house.xpath(".//div[@class='positionInfo']//text()"))
            # 房屋信息
            item["houseInfo"] = "".join(house.xpath(".//div[@class='houseInfo']//text()"))
            # 单价
            item["unitPrice"] = re.findall(pattern=r'[0-9]*',string=house.xpath(".//div[@class='unitPrice']/span/text()")[0])[2]
            # 总价
            item["totalPrice"] = house.xpath(".//div[@class='totalPrice']/span/text()")[0]

            yield item
            # print(item)
  • redis存储模块
def write_to_redis(data):
    # 创建一个redis链接
    rds = redis.StrictRedis(host="**********",port=6379,db=1)
    # 向redis数据库中存入数据
    for item in data:
        rds.lpush("ershoufang",json.dumps(item)) # 某些版本的redis数据库不能直接存字典和对象,必须把字典转成json字符串
  • 调用函数
if __name__ == '__main__':
    url = 'https://%s.******.com/ershoufang/pg%d/'
    # 生成一个城市列表
    city_list = ['sh','sz','gz','hz','tj']
    html_list = request_data(url=url,city_list=city_list)
    house_list = analysis_data(html_list)
    write_to_redis(house_list)

requests 模块

  • requests是一个第三方的请求框架,对urllib进行了二次的封装,简化urllib的一些操作
简单的get请求
res = requests.get(url="https://www.baidu.com")
print(res)	#<Response [200]>
print(res.text) # 字符串格式的响应体		
print(res.content) # 二进制格式的响应体
带参的get请求
url = "https://www.baidu.com/s"
# 请求体
params = {
    "ie":"utf-8",
    "wd":"范冰冰"
}
# 请求头
headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.86 Safari/537.36'}
res = requests.get(url=url,params=params,headers=headers)
print(res)
post请求
post_url = "https://fanyi.baidu.com/sug"
# 请求体
data = {
    "kw":"a"
}
res = requests.post(url=post_url,data=data,headers=headers)
print(res.text)

会话处理

  • 为什么引进会话技术?

    requests没有直接接收cookie的功能,

    由于requests不能直接接收cookie,此时再次发请求时并没有携带cookie,后台就检测不到登录信息,就会跳转至登录页

  • 使用session的原因

    • 用Session对象发起请求,不仅可以提交参数还能提交cookie
    • 用Session对象来发起请求,不仅可以接收响应体还能接收cookie
  • 使用方法

import requests

login_url = 'http://www.jokeji.cn/user/c.asp'
# u=112&p=qweqe&sn=1&t=big
headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.86 Safari/537.36'}

# 创建一个requests的Session对象,用于接收并保存cookie
s = requests.Session()

params = {
    "u":"*****",
    "p":"*******",
    "sn":"1",
    "t":"big"
}
# 发起get请求来登录
res = s.get(url=login_url,params=params,headers=headers)

print(res.text)

# 跳转主页url
main_url = "http://www.jokeji.cn/User/MemberJoke.asp"

main = s.get(url=main_url,headers=headers)
print(main.text)

使用requests爬取某网站

  • 分析该网页登录页面需要提供什么信息?
    • 需要提交验证码和两个token值,而这两个token值和验证码都是通过刷新登录页得到的,所以我们在向登录接口发post请求之前首先要想当前的这个登录页面的url发起一个get请求来提取以上信息
  • 登录页的get请求应该用requests来发还用Session?
    • 请求的时候要用Session,因为验证码和token获取要和当前终端cookie对应上
操作流程
# 创建一个Session对象
s = requests.Session()
# 登录页面url
login_page = 'https://so.**.org/user/login.aspx?from=http://so.**.org/user/collect.aspx'
# 访问登录页面来提取验证码和token
login_html = s.get(url=login_page,headers=headers)
# 提取token
login_tree = etree.HTML(login_html.text)

token1 = login_tree.xpath("//input[@id='__VIEWSTATE']/@value")[0]
token2 = login_tree.xpath("//input[@id='__VIEWSTATEGENERATOR']/@value")[0]

# 提取验证码(拼接域名和路由)
code_url = "https://so.*****.org" + login_tree.xpath("//img[@id='imgCode']/@src")[0]
# 下载验证码,下载验证码的时候也要用Session
code_data = s.get(code_url,headers=headers)
with open("code.png","wb") as fp:
    fp.write(code_data.content)
# print(token1,token2)
# 人工识别验证码
code = input("请打开验证码图片查看,并且在此处输入你看到的内容:")

# 发起post请求登录
login_url = "https://so.*****.org/user/login.aspx?from=http%3a%2f%2fso.****.org%2fuser%2fcollect.aspx"
data = {
    '__VIEWSTATE':	token1,
    '__VIEWSTATEGENERATOR':token2,
    'from':	'http://so.***.org/user/collect.aspx',
    'email':'*****',
    'pwd':'*******',
    'code':code,
    'denglu':'登录'
}
res = s.post(url=login_url,data=data,headers=headers)
print(res.text)

网络爬虫 - 5 Xpath的使用方法与爬取案例 1.Xpath简介 (1)xml概念: 被设计用来传输和存储数据,和json同处于一个位置,但是目前以json居多 (2)xml和html的不同点: (a)xml用来传输数据,html用来显示数据 (b)xml的标签没有被预定义,html的标签是预定义好的 (c)xml具有自我描述性 (3)常用的路径表达式: / : 从根节点开始查找 // : 从任意位... 阅读详情

相关推荐

python爬虫-XPath案例

文章目录案例一:4k图片解析下载案例二:全国城市名称爬取 案例一:4k图片解析下载 目的:爬取并下载相关网站中的图片 网站地址 示例代码 import requests from lxml import etree import os import time // 1. 创建文件夹,然后获取url,进行UA伪装 if not os.path.exists('./4kpic'): os.mkdir('./4kpic') url = 'http://pic.netbian.com/4kb

m0_46500590的博客 541

爬虫实例:爬取二手房数据

​ 需求:根据用户所选省份及城市爬取对应的二手房数据及图片,并将数据保存到excel中,图片保存到文件夹中,得到的数值类型的单价、总价和关注度,并画出单价与关注度,总价与关注度的图像,并找出关注度最高的二手房单价和总价。

m0_73614183的博客 3029

〖Python网络爬虫实战⑬〗- XPATH实战案例

我们通过学习了简单的Xpath操作,以及在另外一篇xpath的实战案例下,本文,继续分享一个关于xpath的实战案例。xpath最大的难点就是如何写下path后面的语法,我们要找到对应的节点,就可以了。

爱吃饼干的小白鼠的博客 1536

Python爬虫实战,链家二手房数据轻松抓取!

随着大数据时代的到来,数据分析已经成为各行各业的重要竞争力。而数据采集作为数据分析的前置步骤,其重要性不言而喻。今天,我们就来聊聊如何使用Python爬虫技术,轻松抓取链家二手房数据。。

weixin_42684533的博客 6706

python爬虫数据解析xpath解析详细讲解——附有详细案例

1.什么是xpath 菜鸟教程这么解释的 XPath 使用路径表达式在 XML 文档中进行导航 XPath 包含一个标准函数库 XPath 是 XSLT 中的主要元素 XPath 是一个 W3C 标准 百度百科这么解释的 是一种用来确定XML文档中某部分位置的语言 是最常用的最广泛的数据解析方式 2.xpath解析原理 ①实例化一个etree的对象,且需要将被解析的页面源码数据加载到该对象中 ②调用etree对象中的xpath方法结合着xpath表达式实现标签的定位和内容的捕获 3.环境的安装 pi

getture的博客 4万+

python网络爬虫笔记04:基于XPATH的网页解析案例

简单语法说明及当当网爬虫案例

m1m2m3mmm的博客 255

Python爬虫案例之爬取二手房源数据

house_area = selector.css('.content li:nth-child(3)::text').get().replace('㎡', '') # 面积。sub_info = selector.css('.type .subInfo::text').get().split('/')[-1] # 装修。date = selector.css('.area .subInfo::text').get().replace('年建', '') # 年份。

Dadaw1的博客 1936

基于Python的上海二手房数据爬取及分析项目源代码,含爬虫、报告及汇报PPT

基于Python的上海二手房数据爬取及分析项目源代码,含爬虫、报告及汇报PPT 首次购房者及预算有限群体 目标定位:聚焦于低价小户型(紫色聚类),这些房源通常位于非核心区域,面积较小,单价和总价相对较低,适合首次购房者或预算有限的家庭。 策略建议:优先考虑交通便利性和未来发展规划,寻找性价比高的潜力区域,利用贷款政策,合理安排财务计划,确保长期居住舒适度与投资增值潜力。 中产家庭及改善型需求群体 目标定位:关注中价中户型(绿色聚类),此类房源在面积、价格、位置上提供了较好的平衡,能满足多数家庭的居住升级需求。 策略建议:重视学区资源、社区环境及生活配套,考虑长期居住需求,适当牺牲面积以换取更好的地段或品质,关注区域发展趋势,适时出手。 高端买家及投资客群 目标定位:高价大户型(黄色聚类)位于核心区域,面积大、单价高,适合追求高品质生活或寻求资产保值增值的投资者。 策略建议:注重地段优势、物业管理水平及房屋品质,考察周边高端资源如商务区、国际学校等,评估未来租金收益与资本增值潜力,采取审慎投资策略,避免盲目追高。

Python爬虫xpath语法及案例使用

利用XPath的所有用法,从常用语法,到案例练习都走了一遍

m0_72557783的博客 1813

开源浏览器插件开发实战:从零搭建多平台内容分发工具

浏览器扩展(Browser Extension)是运行在浏览器上层、通过标准Web技术增强浏览器能力的轻量级程序,其核心价值在于对页面内容的读取、操作与跨应用信息流转。在内容创作与分发场景中,创作者频繁需要在公众号、知乎、优快云、头条等平台间搬运同一篇文章,而传统SaaS分发工具往往受限于免费额度、授权托管和平台适配滞后等问题。基于Manifest V3规范,开发者可以构建一款100%开源、永久免费的浏览器插件,利用content script完成从源文章页提取标题、正文与图片,通过消息通信机制将结构化数

weixin_29882269的博客 295

40岁从智驾转具身智能之路

我的工作经历比较复杂,本科毕业后工作2年再次读研的,本科和硕士都是机械专业,硕士毕业后干了5年CAM和机器人再转入到自动驾驶行业。在自动驾驶干了8年,发现自动驾驶已经到了一个瓶颈,再次转行做具身智能。我就谈谈自己的最近这次转型之路。

hzm8341的博客 638

Python爬虫之xpath语法及案例使用

表达式描述实例nodename选取此节点的所有子节点选取了div节点的所有子节点/从根节点选取从根节点上选取div节点//选取所有当前节点,不考虑位置选取所有的div节点.选取当前节点选取当前节点下的div节点..选取当前节点的父节点回到上一个节点@选取属性选取所有的class属性以上就是利用XPath的所有用法,从常用语法,到案例练习都走了一遍。

linmeiyun的博客 2550

基于ENVI5.6与SARscape的哨兵一号时序InSAR实战:从数据准备到PS/SBAS结果解译

本文详细介绍了基于ENVI5.6与SARscape软件,利用哨兵一号(Sentinel-1)卫星数据,进行PS-InSAR与SBAS-InSAR时序分析,以监测地表形变的完整实战流程。内容涵盖从数据下载、软件配置、预处理、核心处理步骤到结果解译与质量评估,重点解析了PS与SBAS方法的关键参数设置、常见问题及解决方案,旨在帮助用户掌握从数据准备到成果分析的完整技术链条。

oo7890的博客 634

网络爬虫xpath实战案例

使用网络爬虫爬取视频,使用了线程池实现异步爬取,使用xpath提取数据,真实的下载地址提取

qq_51723187的博客 1128

Redhawk: 为什么STA CHECK中switch cell覆盖率为0(STA file中switch control pin没有timing window)?

如题,做dynamic analysis时,不需要switch cell的timing window信息,但是做low power analysis需要做上电时switch cell的timing window就是必须的了,本文对switch cell control pin没有timing window (STA CHECK覆盖率为零)的这种现象做分析。

m0_61544122的博客 1197

Cadence画PCB的傻瓜式教程

1.原理图1)建立元件库2)建立原理图3)在原理图中画好电路图4)利用MENTOR-GRAPHICS-IPC-7351-LP-VIEWER查看元件的封装信息,用pad designer画焊盘,用pcb editor画元件的封装(对照LP_VIEWER),(也可以使用package wizard)5)在原理图中为元件添加封装信息(键入)6)Drc检查7)生成网表2.Pcb1)设置...

tianpu2320959696的博客 1万+

python中xpath使用案例_Python爬虫(十三)_案例:使用XPath的爬虫

本篇是使用XPath的案例,更多内容请参考:Python学习指南案例:使用XPath的爬虫现在我们用XPath来做一个简单的爬虫,我们尝试爬取某个贴吧里的所有帖子且将该帖子里每个楼层发布的图片下载到本地。#-*- coding:utf-8 -*-#tieba_xpath.py"""作用:本案例使用XPath做一个简单的爬虫,我们尝试爬去某个贴吧的所有帖子"""import osimport url...

weixin_39623350的博客 508

04 HCM CPI SF集成-员工集成(一)

将员工主数据和组织数据从SAP Successfactors Employee CentraI复制到SAPERP或SAP S/4HANA,SAP SF CPI HCM集成

SAP CPI 146

【基础】【Python网络爬虫】【5.数据解析】bs4、Xpath、Parsel模块、正则表达式(附大量案例代码)(建议收藏)

数据解析 1. 为何数据解析 2. 常见的数据类型 结构化数据 半结构化数据 非结构化数据 3. 爬虫项目实现步骤 数据解析模块 1. Bs4 环境安装 bs4解析流程 案例 - bs4碧血剑文本爬取 2. Xpath 环境安装 xpath解析的编码流程 xpath表达式如何理解? 案例 - 简历模板下载 案例 - 爬取空气质量数据网 案例 - (彼岸图)图片数据爬取 3. Parsel 模块 CSS 标签选择器 类选择器 ID选择器 组合选择器 伪类选择器 案例 - css解析小说1 提取属性和文本数据

weixin_43612602的博客 2117

扣子(Coze)搭建智能体完整实战指南 —— 从零基础入门到写小说及其他需求扩展开发

随着大语言模型进入应用爆发期,我们正在经历从“寻找提示词”向“构建智能体”的范式转移。扣子(Coze)作为字节跳动推出的一站式AI智能体开发与运营平台,极大地降低了AI应用开发的门槛,让非技术人员也能快速搭建具备感知、决策、行动能力的智能体。 本文将手把手带你从零开始,在扣子平台上搭建一个功能完备的**小说创作智能体**,并基于此展示如何将同一套架构扩展到其他需求场景。无论你是写作爱好者、内容创作者,还是希望用AI赋能日常工作的职场人士,这套完整的技术方案都将帮助你快速上手。

huanghm88的专栏 638

第21章—技术管理篇(上):身为技术人该怎样带好团队并做好管理者

上节讲了职业规划和学习提升这两个话题,随着职业规划的不断落地,或者自己能力的不断提升,大家也会逐渐被提拔成“职级更高”的人。企业规模扩张时,员工数量也会变多,意味着Boss需要更多的人来辅助管理,而管理者会从外部招聘吗?也许会,但大多企业更喜欢从内部选拔,毕竟人的天性更希望找的人值得信赖。此时,一些能力不错、做事靠谱的老员工,就会被“赶上”管理者的位子。作管理不难,但想要“”就需要一定情商。

运维老生常谈 1366

XPath与lxml库介绍及爬虫案例

XPath与lxml库介绍及爬虫案例XPath介绍XPath(XML Path Language)是一门在XML文档中查找信息的语言,可用来在XML文档中对元素和属性进行遍历。XPath的节点XPath的节点有7种类型:文档节点,元素节点,属性节点,文本节点,命名空间节点,处理指令节点,注释节点。对于我们需要关注的是前面4个节点。下面看xml文档。<?xml version="1.0" encodi

Widsom的博客 1万+

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

盘点Python网络爬虫过程中xpath的联合查询定位一个案例

点击上方“Python爬虫与数据挖掘”,进行关注回复“书籍”即可获赠Python从入门到进阶共10本电子书今日鸡汤忽逢青鸟使,邀入赤松家。大家好,我是皮皮。一、前言前几天在Python钻石交流群【髙鵬】问了一个Python网络爬虫的问题,提问截图如下:原始代码如下:importtime fromseleniumimportwebdriver fromselenium.webdriver....

pdcfighting的博客 362

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

Python爬虫(十三)_案例:使用XPath的爬虫

本篇是使用XPath的案例。

javasdn的博客 642

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

上一篇: python爬虫之lxml框架
下一篇: python操作Redis
Are you ready
博客等级 码龄8年 312粉丝 33原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值