初学Python爬虫

初学Python爬虫

  • 爬虫定义

    模拟客户端发送网络请求,获取响应数据,自动的抓取万维网信息的程序或脚本

  • requests库

    HTTP请求库,作用是发送请求获取响应数据

    安装:pip install requests

    #导入模块
    import requests
    #发送请求,获取响应
    response = requests.get('https://www.baidu.com/')
    #获取响应数据
    response.encoding = 'utf-8'   
    print(response.text)
    print(response.content.decode()) //二进制
    

    response.text,响应体str类型
    response.ecoding,二进制转换字符使用的编码
    response.content,响应体,byte类型

  • BeautifulSoup库

    从HTML或XML文件中提取数据的Python库,有遍历文档树和搜索文档树中描述的大部分的方法

    安装:pip install bs4pip install lxml

    #导入模块
    from bs4 import BeautifulSoup
    #创建BeautifulSoup对象
    soup = BeautifulSoup('<html>data</html>','lxml')
    print(soup)
    

    find方法find(name=None, attrs={}, recursive=True, text=None, \**kwargs)

    name:标签名
    attrs:属性
    recursive:是否递归循环查找
    text:根据文本内容查找
    返回找到的第一个元素

    find_all返回找到的所有元素

    #根据标签进行查找
    soup.find('a')
    #根据属性进行查找
    soup.find('id=link1')
    soup.find(attrs={id:'link1'})
    #根据文本查找
    soup.find(text='查找内容')
    

    tag对象(find方法返回的对象)

    应用于原始文档中的XML或HTML标签,有很多方法和属性,可遍历文档树和搜索文档书以及获取标签内容

    name,获取标签名
    attrs,获取标签所有属性的键和值
    text,获取标签的文本字符串

  • 正则表达式

    是一种字符串的匹配模式

    检查一个字符串是否含有某种子串
    替换匹配的子串
    提取某个字符串中匹配的子串

    <center>字符</center>

    一般字符 匹配自身 abc abc
    . 匹配任意除换行符"\n"外的字符,在DOTALL模式也能匹配换行符 a.c abc
    \ 转义字符 a\.c a.c
    […] 字符集(所有特殊字符在字符集中都失去意义,需要加\) a[bcd]e abe | ace |ade

    <center>预定义字符集</center>

    \d 数字:[0—9] a\dc a1c
    \D 非数字:[^\d] a\Dc abc
    \s 空白字符:[<空格>\t\r\n\f\v] a\sc a c
    \S 非空白字符:[^\s] a\Sc abc
    \w 单词字符:[A-Z a-z 0-9 _ 中文] a\wc abc
    \W 非单词字符:[^\w] a\Wc a c

    <center>数量词</center>

    * 匹配前一个字符0次以上(包含零次) abc* ab | abccc
    + 匹配前一个字符1次以上(包含一次) abc+ abc | abccc
    匹配前一个字符0次或一次 abc? ab | abc
    匹配前一个字符m次 ab{2}c abcc

    re.findall方法

    re.findall(pattern,string,flags=0)

    扫描整个字符串,返回所有与pattern匹配的列表

    参数:pattern:正则表达式, string:字符串, flags=0:匹配模式

    #导入正则模块
    import re 
    rs = re.findall('a.c','abc')
    print(rs)
    #不加re.DOTALL(re.S),不能匹配换行符
    rs = re.findall('a.bc','a\nbc',re.DOTALL)
    #结果['a\nbc']
    rs = re.findall('a.+bc','a\nbc',re.DOTALL)
    # 结果['\n'],括号外的用来定位,只匹配小括号里的内容
    rs = re.findall('a(.+)bc','a\nbc',re.DOTALL) 
    

    r原串

    消除转移符带来的影响,还可以解决PEP8不规范问题

  • JSON

    JSON Python
    object dict
    array list
    string str
    number(int) int,long
    number(real) float
    true True
    false False
    null None
    import json
    #把json字符串转换成python类型数据
    pythonDict = json.loads(json_str)
    #json格式文件转换成python类型数据
    #打开文件对象
    with open('path',encoding=utf-8) as f:
        #把文件json格式内容转换成python类型数据
        pythonList = json.load(f)
        
    ###############################################
    #python转换成JSON字符串
    json_str = json.dumps(pythonDict)
    #以写的方式打开
    with open('path','w') as f:
    #把python数据以json格式存储到文件中
    json.dump(pythonDict,f,ensure_ascii=False)
    
posted @ 2022-09-10 09:59  小林の一生  阅读(28)  评论(0)    收藏  举报