关于python爬虫解析的问题

2023-05-16

在进行Python爬虫解析时,需要注意以下事项:

1、良好的网站使用协议:需要遵守网站的robots.txt文件,以确保你的爬虫程序不会将网站拦截下来。

2、编码问题:需要正确设置HTTP头和解析器的编码,以确保爬虫程序能够正确地解析网站的信息。

3、数据解析:需要适当地处理HTML文档中的标签,以便从中筛选出目标数据。

4、网站反爬虫机制:需要了解网站的反爬虫机制,采取相应的策略,确保爬虫程序不会被网站屏蔽。

5、频率控制:需要适度控制爬虫程序的请求频率,以避免给网站带来过多负荷。

6、数据存储:需要将爬取到的数据存储到合适的位置,例如数据库或文件系统中。

7、长期稳定性:需要优化代码,确保程序长期稳定地工作。

今天主要整理python的三种解析方法

正则表达式

1、正则解析主要是以//.和//.?的两种从而获得想要获取的数据就比如说在分页爬取的时候中间的

ex = '<div class="thumb">.*?<img src="(.*?)" alt.*?</div>'
img_src_list = re.findall(ex, page_text, re.S)

这是一个正则表达式的一个解析式 中间的(.*?)就是用来匹配你所要的内容。

主要就是是用python所提供的re模块用于实现正则表达式的操作,在操作的时候可以使用re提供的方法(search(),match(),findall())进行字符串处理;

他们三个都有共同的参数

pattern:模式字符串

string:要进行匹配的字符串

flags:可选参数,表示标识位,用于控制匹配方式,如是否匹配字母大小写

在这里插入图片描述

match()

用于从字符串的开始位置进行匹配如果开始位置匹配成功择返回match对象,否则择返回None

search()

用于整个字符串中搜索第一个匹配到的值,如果匹配成功则返回search对象,如果没有匹配成功则返回None

findall()

用于匹配整个列表中所有符合正测表达式的字符串并一列表的形式返回,,没有则返回None

关于.和.?的区别

.表示匹配换行符之外的任何单字符,*表示零次或者多次,所以.和在一起就是表示出现任意字符零次或者多次。如果没有?则表示贪婪模式

比如 a.b他将会匹配最长的以a开始,以b结束的字符串

.?表示懒惰模式

比如a.?b将会匹配以a开始,以b结束匹配最短的且符合标准的字符串

# 分页爬取
import requests
import os
import re

if __name__ == '__main__':
    if not os.path.exists('./fenyelibs'):
        os.mkdir('./fenyelibs')
    else:
        print()
    # 设置一个通用的url模版
    url = 'https://www.qiushibaike.com/imgrank/page/%d/'
    # pagenum=2
    headers = {
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.93 Safari/537.36 Edg/90.0.818.51'
    }
    for item in range(1, 3):
        pagenum = item
        new_url = format(url % pagenum)
        # print(new_url)
        page_text = requests.get(url=new_url, headers=headers).text
        ex = '<div class="thumb">.*?<img src="(.*?)" alt.*?</div>'
        img_src_list = re.findall(ex, page_text, re.S)
        for src in img_src_list:
            new_src = 'https:' + src
            img_data = requests.get(new_src, headers=headers).content
            img_name = src.split('/')[-1]
            img_path = './fenyelibs/' + img_name
            with open(img_path, "wb")as file:
                file.write(img_data)
                print(img_name, '下载完成')
    print('下载完成!!!')

bs4解析

# 针对与bs4  实例化一个BeautifulSoup对象,并且将页面源码数据加载到该对象中
#            通过调用BeautifulSoup对象中相关的属性或者办法进行标签定位
from bs4 import BeautifulSoup

if __name__ == '__main__':
    fp = open('./text.html', 'r', encoding='utf-8')
    soup = BeautifulSoup(fp, 'lxml')
    #print(soup)
    print(soup.a)#soup.tagname 返回的是HTML中第一次出现的tagname对应的标签
    print('-----')
    print(soup.div)
    #soup.find()
    print('------')
    print(soup.find('div'))#相当于soup.div
    #属性定位
    print('---------属性定位:\n',soup.find('div',class_='song'),'\n')
    print('--------find_all:',soup.find_all('a'))
    #select
    print('----select\n',soup.select('.tang'),'\n')#某种选择器(id,class,标签...选择器),返回的是一个列表 只要符合选择器的要求
    #层级选择器
    print(soup.select('.tang > ul > li > a')[0],'\n')#>是一个层级
    print(soup.select('.tang > ul a')[0])#空格表示多个层级
    #获取标签之间的文本数据  text 和get_text()可以获取标签中的所有文本内容
    #                     string只可以获取该标签下面的直系文本内容
    print(soup.select('.tang > ul a')[0].get_text())
    print(soup.select('.tang > ul a')[0].text)
    print(soup.select('.tang > ul a')[0].string,'\n')
    print('测试一下','\n')
    print(soup.find('div',class_='song').text)
    #获取标签中的属性值'
    print('获取标签中的属性值:\n',soup.select('.tang>ul a')[0]['href'])

他这中间会有find find_all select 三种查找的犯法

find是返回查找到的第一个值

find_all是返回查找到的所有值以列表形式返回

select 某种选择器(id,class,标签…选择器),返回的是一个列表 只要符合选择器的要求

他在进行网页查找的时候要记得在他div的标签属性下加.使用>进行下一个选项如果要跨级去中的话那就要是用空格

xpath解析

from lxml import etree
import requests

if __name__ == '__main__':
    print('hello python!!')
    #实例化一个etree对象,并且被解析的源码也加载到了该对象中
    tree=etree.parse('text.html')
    #调用xpath
    r=tree.xpath('/html/body/div/text()')#在HTML前边加一个/标识从根节点开始 后边的/标识一个层级
    # r=tree.xpath('/html//div')#//表示多个层级
    #r=tree.xpath('//div')#//标识可以从任意的位置去定位div标签
    print(r)
    # r1 = tree.xpath('//div[@class="sng"]/p[3]')
    # r2 = tree.xpath('//div[@class="sang"]/p[3]')  # 索引是从1开始的
    # # print(r1)
    # print(r2)
    r3=tree.xpath('//div[@class="tang"]//li[5]/a/text()')[0]#取文本用/text()
    print(r3)
    r4=tree.xpath('//li[7]//text()')[0]#/txet()获取的是标签中直系的文本内容
                                        #//text()获取的是标签中的非直系的内容
    print(r4)
    r5=tree.xpath('//li//text()')
    for item in r5:
        print(item)
    print('----------------')
    r6=tree.xpath('//div[@class="sang"]/img/@src')#取属性值用/@sttrName 可以取到标签属性当中的文本内容
    print(r6)

这个他就使用的是/进行分级的 要是要想跨级进行查找的话那就要使用//

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

关于python爬虫解析的问题 的相关文章

  • centos7 nvidia-smi命令很慢

    nvidia smi命令很慢 xff0c 长时间才有输出 sudo usr bin nvidia persistenced verbose 设置开机自启动 chmod 43 x etc init d rc local vim etc ini
  • PX4代码解析:振动分析

    本篇文章首发于公众号 xff1a 无人机系统技术 更多无人机技术相关文章请关注此公众号 一 前言 前面的文章主要都是一些理论知识为主 xff0c 很多读者朋友看了之后可能会有点枯燥 xff0c 里面很多公式看起来也比较晦涩 xff0c 今天
  • 如何学习飞控

    本篇文章首发于公众号 xff1a 无人机系统技术 更多无人机技术相关文章请关注此公众号 xff0c 有问题也可在公众号底部添加个人微信进行交流 无人机涉及哪些工作 自开公众号以来 xff0c 陆续有不少关注者提问怎么去学习无人机技术 xff
  • Python3中.pyd文件介绍

    pyd文件是用Python编写生成的动态链接库 xff0c 包含一个或多个Python modules xff0c 可以被其它Python代码调用 以下是 pyd的生成及调用测试 xff1a 通过conda创建虚拟环境Python Test
  • PX4姿态控制算法详解

    本篇文章首发于公众号 xff1a 无人机系统技术 更多无人机技术相关文章请关注此公众号 xff0c 有问题也可在公众号回复 加群 进入技术交流群进行交流 倾转分离 今天的内容我们来解析开源飞控软件PX4中关于多旋翼飞行器的姿态控制算法 首先
  • 我为什么不挣钱也要写公众号

    本篇文章首发于公众号 xff1a 无人机系统技术 更多无人机技术相关文章请关注此公众号 xff0c 有问题也可在公众号回复 加群 进入技术交流群进行交流 自开无人机系统技术这个公众号以来已经有半年之久了 xff0c 我是在今年一月份开的公众
  • 开源飞控PX4姿态控制代码解析

    本篇文章首发于公众号 xff1a 无人机系统技术 更多无人机技术相关文章请关注此公众号 xff0c 有问题也可在公众号回复 加群 进入技术交流群进行交流 本公众号将于9月11号联合电子工业出版社送出15本价值98元的 多旋翼飞行器设计与控制
  • 位置控制器PX4代码解析(文中有福利!!!)

    号外号外 xff01 xff01 xff01 本公众号将联合电子工业出版社于9月11号送出15本价值98元的全权老师著作 多旋翼飞行器设计与控制 xff0c 关注本公众号的朋友均可参加 xff0c 敬请期待 还没关注的朋友赶紧关注吧 xff
  • 多旋翼无人机的控制分配

    本文最先发表于公众号 xff1a 无人机系统技术 公众号回复 加群 进入无人机技术交流群交流 公众号回复 多旋翼 获取国际顶尖团队科研成果 公众号回复 控制分配 获取控制分配相关论文 引言 本文内容主要阐述控制分配在多旋翼无人机上的使用方法
  • 无人机

    引言 本文最先发表于公众号 xff1a 无人机系统技术 公众号回复 加群 进入技术交流群进行交流 公众号回复 多旋翼 获取国际顶尖团队科研成果 公众号回复 控制分配 获取控制分配相关论文 从今年初开始写公众号也有一段时间了 xff0c 不知
  • 顺丰旗下丰鸟无人机高薪诚聘海内外英才

    公司简介 丰鸟无人机 xff08 顺丰无人机 xff09 成立于2017年 xff0c 是顺丰集团旗下大型无人机技术和服务提供商 xff0c 致力于运用智能航空技术 xff0c 提供高效物流服务 通过自主研发和对外合作 xff0c 打造业载
  • 无人机研发什么?

    更多无人机知识请关注公众号 xff1a 无人机系统技术 xff0c 北航博士为你解析全面的无人机系统知识 无人机是一个很复杂的系统 xff0c 有点类似于我们平常使用的手机 xff0c 都是软件和硬件的结合体 xff0c 手机上面需要各种芯
  • PX4算法解析:L1制导律

    一 前沿 更多无人机知识请关注公众号 xff1a 无人机系统技术 xff0c 北航博士为你解析全面的无人机系统知识 从今天开始 xff0c 会陆续为大家解读开源飞控软件px4中使用到的各种算法 xff0c 今天要讲述的是L1制导律 xff0
  • PX4算法:L1制导律(二)

    一 前沿 上一篇文章中我们对L1制导律做了一个比较详细的解释 xff0c 但没有对PX4软件中的算法和理论进行对应 xff0c 好多读者看了之后还是云里雾里 xff0c 在后台提问的也有不少 今天我们就来具体介绍一下PX4中的L1参数和制导
  • instant-ngp中run.py的使用

    在https blog csdn net fengbingchun article details 129642774 中对instant ngp进行了简单介绍 xff0c 这里简单介绍下如何使用其中的run py 1 若能运行run py
  • MAVROS PX4

    最近在做视觉识别的项目 xff0c 视觉开发的工作在NVIDIA的JETSON TX2板卡上完成 xff0c 也可以用ODROID xff0c 这个视情况而定 xff0c 而视觉识别后的结果要传输给飞控 xff0c 因为在TX2上面跑的是R
  • sudo apt-get install –y

    ubuntu系统下安装软件时总会提示你是否安装 xff0c 你要输入yes才会继续安装 xff0c 下面这个指令可以帮助你省略这个步骤 xff0c 只需要简单的在后面加一个 y即可 sudo apt get install y y xff1
  • PX4开发环境搭建

    前言 更多无人机知识可关注公众号 xff1a 无人机系统技术 北航博士为你解析全面的无人机系统知识 很多朋友在搭建PX4开发环境的时候都会出现一些环境配置的问题 xff0c 今天笔者就来总结一下ubuntu系统下搭建PX4开发环境的过程 想
  • Linux(Ubuntu)系统如何安装Python

    Linux 系统是为编程而生的 xff0c 因此绝大多数的 Linux 发行版 xff08 Ubuntu CentOS 等 xff09 都默认自带了 Python 有的 Linux 发行版甚至还会自带两个版本的 Python xff0c 例
  • Python抓取数据如何设置爬虫ip

    在写爬虫爬取github数据的时候 xff0c 国内的ip不是非常稳定 xff0c 在测试的时候容易down掉 xff0c 因此需要设置爬虫ip 本片就如何在Python爬虫中设置爬虫ip展开介绍 也可以爬取外网 爬虫编写 需求 做一个通用

随机推荐

  • PHP爬虫框架盘点

    大数据分析必定少不了数据抓取 xff0c 只有拥有海量的数据才能对数据进行对比分析 因此 xff0c 网页爬虫是作为程序员必须要懂得技能 xff0c 下文我将通过文字形式记录下php的爬虫框架的一些内容 Goutte Goutte库非常有用
  • 反爬虫常见策略总结

    有爬虫就有反爬虫 xff0c 这都是相辅相成的 xff0c 对于长时期从事在爬虫行业的技术员来说 xff0c 时刻要了解对应网站的反爬机制 xff0c 才能稳定获取数据 下面就是我这几年接触过的反爬的一些案例 xff0c 供大家参考下 反爬
  • Python网络爬虫进阶扩展

    学习爬虫不是一天就能学会的 xff0c 得循序渐进的慢慢学透了 xff0c 才能更好的做爬虫相关的工作 下面的爬虫有关的有些知识点肯定要学会 1 如何使scrapy爬取信息不打印在命令窗口中 通常 xff0c 我们使用这条命令运行自己的sc
  • 爬虫之数据库存储

    在对于爬取数量数量较少时 xff0c 我们可以将爬虫数据保存于CSV文件或者其他格式的文件中 xff0c 既简单又方便 xff0c 但是如果需要存储的数据量大 xff0c 又要频繁访问这些数据时 xff0c 就应该考虑将数据保存到数据库中了
  • 关于Python爬虫的一些总结

    作为一名资深的爬虫工程师来说 xff0c 把别人公开的一些合法数据通过爬虫手段实现汇总收集是一件很有成就的事情 xff0c 其实这只是一种技术 初始爬虫 问题 xff1a 什么是爬虫 xff1f 网络爬虫是一种按照一定的规则 xff0c 自
  • 3D文件格式之OBJ介绍

    在 instant ngp 中使用NeRF时 xff0c 保存的mesh可指定为obj 这里对obj文件格式进行说明 OBJ文件 obj 包含有关3D对象的几何体的信息 OBJ文件可以支持无限的颜色 unlimited colors xff
  • Python爬虫知识回顾

    之前一直沉溺于java xff0c jsp xff0c ssh xff0c db等爬虫 xff0c 现在又要开始走python的老路了 常用的requests库 xff0c 通过requests对象的get方法 xff0c 获取一个resp
  • Python 编程必不可少的unittest测试框架

    一段表面看起来平平无常的代码 xff0c 很可能暗藏很多bug无法一眼看透 xff0c 没有经过测试的代码是不可靠的代码 上一篇讲过pytest测试框架这次我们换个框架 unittest 是一个单元测试框架 xff0c 单元测试完成对一个模
  • Python爬虫之读取数据库中的数据

    之前几篇我们一直在研究如何从网站上快速 方便的获取数据 xff0c 并将获取到的数据存储在数据库中 但是将数据存储在数据中并不是我们的目的 xff0c 获取和存储数据的目的是为了更好的利用这些数据 xff0c 利用这些数据的前提首先需要从数
  • Python爬虫之多线程加快爬取速度

    之前我们学习了动态翻页我们实现了网页的动态的分页 xff0c 此时我们可以爬取所有的公开信息了 xff0c 经过几十个小时的不懈努力 xff0c 一共获取了 16万 43 条数据 xff0c 但是软件的效率实在是有点低了 xff0c 看了下
  • Python与c语言的区别与联系

    Python与c语言都是一种机器学习语言 xff0c 进过长时间的学习和总结 xff0c 我将Python与c语言的一些特点总结成以下几点 xff0c 不全面还望多多指正 1 因为C语言是编译型语言 xff0c python是解释型语言 x
  • 关于Python爬虫使用技巧

    首先 xff0c Python是一种非常流行的编程语言 xff0c 拥有广泛的应用领域 xff0c 例如数据分析 人工智能 Web开发等 如果您是初学者 xff0c 可以开始学习基础的语法和概念 xff0c 例如变量 数据类型 循环 函数等
  • selenium爬取异步加载的网站

    为了便利化使用selenium驱动浏览器进行操作 xff0c 遇到一个网页 xff0c 大部分内容都是通过xhr请求后再通过前端js处理显示 xff0c 带来的一个问题就是 xff0c 采用显示等待无法准确的定位到需要的节点 因此 xff0
  • 一种通过编码的反爬虫机制

    遇到一个反爬虫机制 xff0c 该网页为gbk编码网页 xff0c 但是请求参数中 xff0c 部分请求使用gbk编码 xff0c 部分请求使用utf8编码 xff0c 还设置了一些不进行编码的安全字符 xff0c 在爬取的过程中形成了阻碍
  • python常见问题总结

    对于长期深耕在python爬虫的程序员来说 xff0c 如何快速解决代码中的问题它是作为合格的程序员应该具备的基本素质 下面将我总结整理出有关python的一些常见问题记录下来方便后期查证 Python python 没有多态 xff0c
  • 爬虫为什么需要多线程

    多线程爬虫是一种同时运行多个线程来提高爬取速度的爬虫方式 通过将大量的工作分配给不同的线程 xff0c 可以减少爬虫的运行时间 xff0c 提高效率 不过需要注意的是 xff0c 在爬取过程中需要合理的管理线程数 xff0c 以避免对被爬取
  • 相机的内参和外参介绍

    注 xff1a 以下相机内参与外参介绍除来自网络整理外全部来自于 视觉SLAM十四讲从理论到实践 第2版 中的第5讲 xff1a 相机与图像 xff0c 为了方便查看 xff0c 我将每节合并到了一幅图像中 相机与摄像机区别 xff1a 相
  • padans关于数据处理的杂谈

    情况 xff1a 业务数据基本字段会有如下 xff1a Index span class token punctuation span span class token punctuation span span class token s
  • Go程序开发快速入门

    当进行Go程序开发时 xff0c 需要注意以下几点 xff1a 1 代码可读性 xff1a 尽可能使用有意义的变量名和注释 xff0c 确保代码易于理解和维护 2 错误处理 xff1a Go语言有很好的错误处理机制 xff0c 应该合理地处
  • 关于python爬虫解析的问题

    在进行Python爬虫解析时 xff0c 需要注意以下事项 xff1a 1 良好的网站使用协议 xff1a 需要遵守网站的robots txt文件 xff0c 以确保你的爬虫程序不会将网站拦截下来 2 编码问题 xff1a 需要正确设置HT