python爬虫解析器bs4,xpath,pquery

embedded/2025/3/25 15:37:09/

0x00 bs4

解析器的作用就是可以直接解析html页面,可以直接从网页中提取标签中的内容,而不用在使用正则表达式进行提起数据

import requests
from bs4 import BeautifulSoup
html_content = '''
<li id='123'><a href='dfsdf'>123</a>789</li>
<li id='55'><a href='f'>456</a>888</li>
'''
# 解析HTML
soup = BeautifulSoup(html_content, 'html.parser')  
li=soup.find_all('li')  #查找所用的li标签
print(li[0].text)       #把第一个li标签中内容读取出来
a=li[0].find("a")       #在第一个li标签中查找a标签
print(a.text)           
print(a.get("href"))   #在读取a标签href的属性值li=soup.find('li',{"id":"123"})  #查找id为123的li标签
for i in li:print(i.text)

在这里插入图片描述
在这里插入图片描述
案列爬取图片
https://haowallpaper.com/
在这里插入图片描述

import requests
from bs4 import BeautifulSoup
url='https://haowallpaper.com/'
html_content=requests.get(url).text
html=BeautifulSoup(html_content,"html.parser")
div=html.find_all("div",{"class":"card"})
n=1
for a_list in div:src=a_list.find("img")src=src.get("src")rep=requests.get(src)with open(f"{n}.jpg",'wb+') as f:f.write(rep.content)   #要用content而不是text文本n+=1

0x01 xpath

案列爬取什么值得买手机价格和手机型号,当源码过多时可以把源码下载下来,删除无用代码然后在进行分析
在这里插入图片描述

import requests
from lxml import etree
from PIL import Image, ImageDraw, ImageFont
headers={"user-agent":
"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/134.0.0.0 Safari/537.36"}
url='https://www.smzdm.com/fenlei/zhinengshouji/'
req=requests.get(url)
html=etree.HTML(req.content)
price_list=html.xpath('//a[@class="z-highlight "]/text()')
title_list=html.xpath('//h5[@class="feed-block-title"]/a[1]/text()')
# a_list=html.xpath("//div[@class='z-feed-img']//img/@src")
count=0
for i in price_list:count+=1
with open("3.txt","a+",encoding='gbk') as f:for i in range(0,count):f.write(price_list[i].strip())f.write(title_list[i].strip()+'\n')

在这里插入图片描述

0x02 PyQuery

1.PyQuery基础使用

from pyquery import   PyQuery
html='''
<div class='aaa'><a href='www.123.com'>aaa</a>aaa1</div>
<div class='bbb'><a href='www.456.com'>bbb</a>bbb1</div>
<div class='ccc' id='cc'><a href='www.789.com'>ccc</a>ccc1</div>
'''
p=PyQuery(html)
#a=p("div a")和a=p("div")("a")是一样的
div1=p("div") #选取所有的div标签
div=p("div .aaa") #选取div的class属性值为aaa的div标签
div2=p("div #cc") #选取div的id值为cc的div标签
print("-------")
print(div)
print("-------")
print(div2)
print("-------")
a=p("div a").attr("href") #提取div标签下的a标签的href属性值,只会提取一个href值
print(a)
a1=p("div a").items()#一个包含所有a标签的迭代器,有很多内容时可以这样提取
for a2 in a1:href=a2.attr("href")text=a2.text() #获取a标签中的文本print(href)print(text)

在这里插入图片描述
修改html页面代码

from pyquery import   PyQuery
html='''
<div class='aaa'><a href='www.123.com'>aaa</a>aaa1</div>
<div class='bbb'><a href='www.456.com'>bbb</a>bbb1</div>
<div class='ccc' id='cc'><a href='www.789.com'>ccc</a>ccc1</div>
'''
p=PyQuery(html)
p("div .aaa").after("<div>qqq</div>") #在第一个div后加一个div标签
p("div .aaa").append("<div>aaa</div>") #在第一个div里面加一个div标签
p("div .aaa").attr("id","111")#在第一个div加一个属性id为111
p("div .aaa").remove()#删除第一个div
p("div .aaa").remove_attr("id")#删除第一个div的id

2.案列豆瓣读书爬取短评,书评,评分,书名,内容,作者简介
在这里插入图片描述
注意这里热门短评是会刷新的,只读取5条,每次读取的都有不一样的地方
在这里插入图片描述

import requests
from pyquery import PyQuery
headers={"user-agent":
"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/134.0.0.0 Safari/537.36"}
url='https://book.douban.com/subject/4913064/'
rep=requests.get(url,headers=headers)
p=PyQuery(rep.text)
with open("1.txt",'a+',encoding='utf-8') as f:title=p("title").text()score=p("div #interest_sectl div div strong").text()f.write(f"书名:{title}\n评分{score}\n")content=p("div .intro").eq(0)("p").text() #选择第一个class为intro的div下所有的p标签composer=p("div .intro").eq(1)("p").text()#选择第二个class为intro的div下所有的p标签f.write(f"内容简介:{content}\n作者简介:{composer}")comments=p("li p span ").items()f.write("\n短评:\n")for i in comments:comment=i.text()f.write(f"{comment}\n")shupin_1=p("div.main-bd ").items()f.write("书评:\n")for j in shupin_1:shupin_2=j("h2 a").text()shupin_3=j("div div .short-content").text().replace("这篇书评可能有关键情节透露","").replace("...  (展开)","")f.write(f"{shupin_2+shupin_3}\n")

在这里插入图片描述


http://www.ppmy.cn/embedded/176039.html

相关文章

python写入excel多个sheet表 以及追加sheet表

python写入excel多个sheet表 以及追加sheet表 写入多个sheet表在excel追加sheet表 可将不同DataFrame分别写入指定Sheet&#xff08;如初始写入"箱_4"和"箱_2"&#xff09;&#xff0c;并通过封装函数append_to_excel支持动态追加新Sheet到现有文件&#x…

高斯数据库的空分区的查看和清理

在 高斯数据库&#xff08;GaussDB&#xff09; 中&#xff0c;分区表是一种常见的表设计方式&#xff0c;用于优化大数据的查询性能。 一、空分区的影响&#xff1a; 存储空间占用 元数据开销&#xff1a;即使分区中没有数据&#xff0c;数据库仍然需要维护分区的元数据&…

Flutter:页面滚动,导航栏背景颜色过渡动画

记录&#xff1a;导航默认透明&#xff0c;页面发生滚动后&#xff0c;导航背景色由0-1&#xff0c;过渡到白色背景。 view import package:ducafe_ui_core/ducafe_ui_core.dart; import package:flutter/material.dart; import package:get/get.dart; import package:redo…

ROM(只读存储器) 、SRAM(静态随机存储器) 和 Flash(闪存) 的详细解析

在嵌入式系统和其他计算机系统中&#xff0c;存储器是不可或缺的组成部分。不同类型的存储器各有其特点和应用场景。以下是 ROM&#xff08;只读存储器&#xff09;、SRAM&#xff08;静态随机存储器&#xff09; 和 Flash&#xff08;闪存&#xff09; 的详细解析。 1. ROM&am…

磁盘清理工具-TreeSize Free介绍

TreeSizeFree是一个磁盘空间管理工具&#xff0c;主要用于分析磁盘使用情况&#xff0c;帮助用户找到占用空间大的文件和文件夹: 特点&#xff1a;按大小排序&#xff1a;快速找到占用空间最大的文件或文件夹 一般可以删除: 扫描 C:\Users\XXX\AppData\Local\Temp 或 C:\Window…

selenium在实际的项目测试过程中的运用

Selenium 是一个广泛使用的自动化测试工具,主要用于 Web 应用程序的测试。以下是 Selenium 在实际项目测试中的一些常见应用场景和示例: 1. 功能测试 场景:测试一个电商网站的登录功能是否正常工作。 from selenium import webdriver# 初始化浏览器驱动 driver = webdriv…

基于springboot+vue的网络海鲜市场

开发语言&#xff1a;Java框架&#xff1a;springbootJDK版本&#xff1a;JDK1.8服务器&#xff1a;tomcat7数据库&#xff1a;mysql 5.7&#xff08;一定要5.7版本&#xff09;数据库工具&#xff1a;Navicat11开发软件&#xff1a;eclipse/myeclipse/ideaMaven包&#xff1a;…

常考计算机操作系统面试习题(四)

目录 1. Peterson 算法伪代码 2. 信号量生产者消费者问题分析 3. 注释 Peterson 主函数并分析输出结果 4. 用 fork 创建子进程的程序 1. Peterson 算法伪代码 题目&#xff1a; 写出 Peterson 算法的伪代码。 参考答案&#xff1a; // 定义变量 boolean flag[2]; //…