0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

Python-爬虫开发02

汽车电子技术 来源:程序猿知秋 作者:程序猿知秋 2023-02-16 15:57 次阅读

谷歌浏览器分析post地址

  • 方式一: 使用浏览器自带开发者工具( f12 快捷键 ),通过查询form表单获取

图片

  • 方式二: 直接点击登录按钮,查看访问的地址(需要注意下面请求时传递的参数,如果部分参数不知道如何得到,可能需要跟踪js文件查看)

图片

  • 方式三: 部分网站的PC端请求时需要的参数较多,但是移动端会少些,所以可以切换到移动端看看请求地址与参数

图片

requests小技巧

  • requests.util.dict_from_cookiejar 把cookie对象转化为字典
  • 请求SSL证书验证
    • r=requests.get(url,verify=False)
  • 设置超时
    • r=requests.get(url,timeout=时间(单位是秒))
  • 使用断言判断状态码是否成功
    • assert respnose.status_code==200

爬虫数据处理

数据分类

  • 非结构化数据:html 等
    • 处理方法:使用 正则表达式、xpath 处理数据
  • 结构化数据:json、xml等
    • 处理方法:转化为python中的数据类型

数据处理之JSON

  • JSON(JavaScript Object Notation) ,是一种轻量级的数据交换格式,它使得人们很容易进行阅读和编写。同时也方便了机器进行解析和生成。适用于进行数据交互的场景,比如网站的前后台之间的数据交互。
  • 爬取豆瓣电视剧列表示例
import json
import requests


class DouBanMovie:
    def __init__(self):
        self.url="https://m.douban.com/rexxar/api/v2/subject_collection/tv_domestic/items?os=android&for_mobile=1&start=0&count=18&loc_id=108288"
        self.headers={
            "User-Agent": "Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.111 Mobile Safari/537.36",
            "Referer": "https://m.douban.com/tv/chinese"
        }


    def get_data(self):
        response = requests.get(self.url, headers=self.headers)
        if response.status_code==200:
            # 将json字符串转化为python中的数据类型
            result=json.loads(response.content.decode())
            return result


    def write_file(self,fileName,data):
        '''写入文件'''


        # json.dumps能够把python中的类型数据转化成json字符串
        data=json.dumps(data,ensure_ascii=False)
        with open(fileName,"w",encoding="utf-8") as f:
            f.write(data)


    def read_file(self,fileName):
        '''读取文件数据'''


        with open(fileName, "r", encoding="utf-8") as f:
            # 加载json类型数据的文件
            result=json.load(f)
        return result




    def run(self):
        # 获取数据
        result=self.get_data()
        # 将豆瓣数据写入文件
        self.write_file("douban.txt",result)
        # 读取文件内容
        readResult=self.read_file("douban.txt")


        print(readResult)




if __name__ == '__main__':
    douban=DouBanMovie()
    douban.run()

数据处理之正则表达式

  • 正则表达式定义
    • 就是用事先定义好的一些特定字符、及这些特定字符的组合,组成一个” 规则字符串 “,这个”规则字符串“用来表达对字符串的一种过滤逻辑
  • 常用正则表达式的方法
    • re.compile(编译)
    • pattern.match(从头开始匹配一个)
    • pattern.search(从任何位置开始匹配一个)
    • pattern.findall(匹配所有)
    • pattern.sub(替换)
  • Python正则表达式中的re.S,re.M,re.I的作用
    • 正则表达式可以包含一些可选标志修饰符来控制匹配的模式。修饰符被指定为一个可选的标志。多个标志可以通过按位 OR(|) 它们来指定。如 re.I | re.M 被设置成 I 和 M 标志

图片

图片

图片

  • python中 r 的用法
    • 'r'是防止字符转义的 如果路径中出现'\\t'的话 不加r的话\\t就会被转义 而加了'r'之后'\\t'就能保留原有的样子

图片

  • 示例(提取成语故事)
import requests
import re


class ChengYu:
    def __init__(self):
        self.url="http://www.hydcd.com/cy/gushi/0259hs.htm"
        self.headers={
            "User-Agent": "Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.111 Mobile Safari/537.36"
        }


    def get_data(self):
        response=requests.get(self.url,self.headers)
        result=None
        if response.status_code==200:
            result=response.content.decode("gb2312")
        return result


    def handle_data(self,html_str_list):
        if html_str_list==None or len(html_str_list)==0:
            return None


        html_str=html_str_list[0]
        result=re.sub(r"\\r|\\t|
"
,"",html_str) return result def run(self): # 访问网页信息 html_str=self.get_data() # 用正则表达式提取 成语故事 html_str_list=re.findall(r"(.*?)",html_str,re.S) # 处理语句中的换行、制表等标识体符 result=self.handle_data(html_str_list) print(result) if __name__ == '__main__': chengYu=ChengYu() chengYu.run()

数据处理之xpath

  • lxml 是一款高性能的python html/xml 解析器,我们可以利用xpath,来快速定位特定元素以及获取节点信息
  • xpath(xml path langueage)是一门在 html/xml 文档中查找信息的语言,可以用来在html/xml 文档中对元素和属性进行遍历
  • 官网地址:https://www.w3school.com.cn/xpath/index.asp
  • xpath 节点选择语法
    • xpath 使用路径表达式来选取xml,文档中的节点或者节点集,这些路径表达式和我们在常规的电脑文件系统中看到的表达式非常相似
表达式 描述
node name 选取此节点的所有子节点
/ 从根节点选取
// 从匹配选择的当前节点选择文档中的节点,而不考虑它们的位置
. 选取当前节点
.. 选取当前节点的父节点
@ 选取属性
  • 常用节点的选择工具
    • Chrome插件 XPath Helper
    • 开源的 XPath表达式编辑工具:XML Quire(xml 格式文件可用)
    • Firefox插件 XPath Checker
  • lxml库
    • 安装lxml:pip install lxml
    • 使用方法:** from lxml import etree**
    • 利用 etree.HTML ,将字符串转化为 Element对象
    • Element对象具有xpath的方法:html=etree.HTML(字符串)
  • 示例
import requests
import re
from lxml import etree


class ChengYu:
    def __init__(self):
        self.url="http://www.hydcd.com/cy/gushi/0259hs.htm"
        self.headers={
            "User-Agent": "Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.111 Mobile Safari/537.36"
        }


    def get_data(self):
        response=requests.get(self.url,self.headers)
        result=None
        if response.status_code==200:
            result=response.content.decode("gb2312")
        return result


    def handle_data(self,html_str_list):
        if html_str_list==None or len(html_str_list)==0:
            return None


        html_str=html_str_list[0]+html_str_list[1]
        result=re.sub(r"\\r|\\t|
"
,"",html_str) return result def run(self): # 访问网页信息 html_str=self.get_data() # 用xpath提取元素 html=etree.HTML(html_str) result=html.xpath("//font[@color=\"#10102C\"]/text()") # 处理语句中的换行、制表等标识体符 result=self.handle_data(result) print(result) if __name__ == '__main__': chengYu=ChengYu() chengYu.run()
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 网站
    +关注

    关注

    1

    文章

    258

    浏览量

    23140
  • 数据交换
    +关注

    关注

    0

    文章

    100

    浏览量

    17917
  • JSON
    +关注

    关注

    0

    文章

    117

    浏览量

    6940
收藏 人收藏

    评论

    相关推荐

    Python数据爬虫学习内容

    ,利用爬虫,我们可以解决部分数据问题,那么,如何学习Python数据爬虫能?1.学习Python基础知识并实现基本的爬虫过程一般获取数据的过
    发表于 05-09 17:25

    Python爬虫与Web开发库盘点

    Python爬虫和Web开发均是与网页相关的知识技能,无论是自己搭建的网站还是爬虫爬去别人的网站,都离不开相应的Python库,以下是常用的
    发表于 05-10 15:21

    0基础入门Python爬虫实战课

    学习资料良莠不齐爬虫是一门实践性的技能,没有实战的课程都是骗人的!所以这节Python爬虫实战课,将帮到你!课程从0基础入门开始,受众人群广泛:如毕业大学生、转行人群、对Python
    发表于 07-25 09:28

    Python爬虫简介与软件配置

    Python爬虫练习一、爬虫简介1. 介绍2. 软件配置二、爬取南阳理工OJ题目三、爬取学校信息通知四、总结五、参考一、爬虫简介1. 介绍网络爬虫
    发表于 01-11 06:32

    详细用Python写网络爬虫

    详细用Python写网络爬虫
    发表于 09-07 08:40 32次下载
    详细用<b class='flag-5'>Python</b>写网络<b class='flag-5'>爬虫</b>

    完全自学指南Python爬虫BeautifulSoup详解

    完全自学指南Python爬虫BeautifulSoup详解
    发表于 09-07 08:55 39次下载
    完全自学指南<b class='flag-5'>Python</b><b class='flag-5'>爬虫</b>BeautifulSoup详解

    WebSpider——多个python爬虫项目下载

    此文档包含多个python爬虫项目
    发表于 03-26 09:29 3次下载

    python爬虫入门教程之python爬虫视频教程分布式爬虫打造搜索引擎

    本文档的主要内容详细介绍的是python爬虫入门教程之python爬虫视频教程分布式爬虫打造搜索引擎
    发表于 08-28 15:32 29次下载

    python为什么叫爬虫 python工资高还是java的高

      人工智能的现世,让python学习成风,由于其发展前景好,薪资高,一时成为众多语言的首选。Python是一门非常适合开发网络爬虫的编程语言,十分的简洁方便所以是网络
    发表于 02-19 17:56 526次阅读

    python爬虫框架有哪些

    本视频主要详细介绍了python爬虫框架有哪些,分别是Django、CherryPy、Web2py、TurboGears、Pylons、Grab、BeautifulSoup、Cola。
    的头像 发表于 03-22 16:13 6787次阅读

    Python爬虫:使用哪种协议的代理IP最佳?

    网络大数据要抓取信息,大多需要经过python爬虫工作,爬虫能够帮助我们将页面的信息抓取下来。
    的头像 发表于 06-28 16:25 1931次阅读

    Python写网络爬虫

    Python写网络爬虫的方法说明。
    发表于 06-01 11:55 21次下载

    Python-爬虫开发01

    网络爬虫(被称为 网页蜘蛛,网络机器人 ),就是 模拟客户端发送网络请求 ,接收请求响应,一种按照一定的规则,自动地抓取互联网信息的程序
    的头像 发表于 02-16 15:55 574次阅读
    <b class='flag-5'>Python-</b><b class='flag-5'>爬虫</b><b class='flag-5'>开发</b>01

    利用Python编写简单网络爬虫实例

    利用 Python编写简单网络爬虫实例2 实验环境python版本:3.3.5(2.7下报错
    发表于 02-24 11:05 14次下载

    如何解决Python爬虫中文乱码问题?Python爬虫中文乱码的解决方法

    如何解决Python爬虫中文乱码问题?Python爬虫中文乱码的解决方法 在Python爬虫过程
    的头像 发表于 01-12 15:11 2170次阅读