• 21天学Python --- 打卡7:Spider爬虫入门


    在这里插入图片描述


    在这里插入图片描述

    1.Introduce

    我们平时都说Python爬虫,其实这里可能有个误解,爬虫并不是Python独有的,可以做爬虫的语言有很多例如:PHP,JAVA,C#,C++,Python,选择Python做爬虫是因为Python相对来说比较简单,而且功能比较齐全。

    • 常用的库
      from bs4 import BeautifulSoup
      import requests
      from urllib import request

    1.1 install package

    先把需要的包都装起来,后面就直接操作

    • pip install requests
      在这里插入图片描述
    • pip install selenium
      在这里插入图片描述
    • pip install BeautifulSoup4
      在这里插入图片描述

    2.小试牛刀

    感受一下学习python的快乐

    import requests
    
    headers = {
        'Host': 'image.baidu.com',
        'Cookie': 'BDqhfp=%E9%BB%91%E4%B8%9D%26%26NaN-1undefined%26%263540%26%268; BIDUPSID=C24C7D8E598E67C686237DEAF51F7B28; PSTM=1656683846; BDUSS=FgtVzQyZHE4QnliUkVmTjdldE5VOEdtNHlVQldZb2xLWVVJZnFYOGRWcHRsZVppRVFBQUFBJCQAAAAAAAAAAAEAAAD36OLxx-C1xr3M0~0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAG0Iv2JtCL9id; BDUSS_BFESS=FgtVzQyZHE4QnliUkVmTjdldE5VOEdtNHlVQldZb2xLWVVJZnFYOGRWcHRsZVppRVFBQUFBJCQAAAAAAAAAAAEAAAD36OLxx-C1xr3M0~0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAG0Iv2JtCL9id; BAIDUID=90512AA3632B152E5F977142A71CD0B0:SL=0:NR=10:FG=1; BDORZ=B490B5EBF6F3CD402E515D22BCDA1598; BAIDUID_BFESS=90512AA3632B152E5F977142A71CD0B0:SL=0:NR=10:FG=1; BA_HECTOR=2k0k2k8l848k8ha5811hc5i8j15; ZFY=2fgqyju9wf05Hbo:AJBrnR:BLWCyBQUITGRJI5nCwvvEg:C; H_PS_PSSID=36545_36462_36721_36455_36668_34812_36691_36167_36693_36696_36073_36772_36746_36760_36771_36766_26350_36712; delPer=0; PSINO=6; BDRCVFR[dG2JNJb_ajR]=mk3SLVN4HKm; userFrom=www.baidu.com; BDRCVFR[-pGxjrCMryR]=mk3SLVN4HKm; ab_sr=1.0.1_MzZhYWQzYThjYWRjNGQ5NDdhOGMxZGYwOTMzZGM5ZDYxYThlYjgyNjg0YjkwZjU1ZDcyZTJiNWFhNmE5YWE5MjMzMzA2Y2NlODg4MDFjZDkyZjljNDYzYTVmZjE5OGMyMDNiODdlMTE3MTliYjgyODg2OWUyMDhiNTczZWFhZjQ3ZWFjMDhmNGViODdkYjhmNjY1MjdlYWNhODlhOTEzMA==',
        'Referer': 'https://image.baidu.com/search/index?tn=baiduimage&ps=1&ct=201326592&lm=-1&cl=2&nc=1&ie=utf-8&dyTabStr=MCwzLDIsMSw0LDUsOCw3LDYsOQ%3D%3D&word=%E9%BB%91%E4%B8%9D',
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/103.0.0.0 Safari/537.36',
    }
    number = 1
    for page in range(1, 11):
        url = f'https://image.baidu.com/search/acjson?tn=resultjson_com&logid=7395480229139350733&ipn=rj&ct=201326592&is=&fp=result&fr=&word=%E9%BB%91%E4%B8%9D&queryWord=%E9%BB%91%E4%B8%9D&cl=2&lm=-1&ie=utf-8&oe=utf-8&adpicid=&st=&z=&ic=&hd=&latest=©right=&s=&se=&tab=&width=&height=&face=&istype=&qc=&nc=1&expermode=&nojc=&isAsync=&pn={page * 30}&rn=30&gsm=d2&1657006313320='
        response = requests.get(url=url, headers=headers)
        json_data = response.json()
        data_list = json_data['data']
        for data in data_list[:-1]:
            fromPageTitleEnc = data['fromPageTitleEnc']
            middleURL = data['middleURL']
            print(fromPageTitleEnc,middleURL)
            img_data = requests.get(middleURL).content
            with open(f'img/{number}.jpg', mode='wb') as f:
                f.write(img_data)
            number += 1
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22

    3.Open && with open

    两者的主要区别就是:

    • open need close()
    • with open no need
    with open(file="你要打开的路径名(或保存内容的地址)",mode="r/w/a",encoding="utf-8") as f:
        data=f.read/write()
        print(data)
    
    • 1
    • 2
    • 3

    3.1 mode parameter

    r:以只读方式打开文件。文件的指针将会放在文件的开头。这是默认模式
    rb:以二进制格式打开一个文件用于只读。文件指针将会放在文件的开头。这是默认模式。
    r+:打开一个文件用于读写。文件指针将会放在文件的开头。
    rb+:以二进制格式打开一个文件用于读写。文件指针将会放在文件的开头。


    w:打开一个文件只用于写入。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件。
    wb:以二进制格式打开一个文件只用于写入。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件。
    w+:打开一个文件用于读写。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件。
    wb+:以二进制格式打开一个文件用于读写。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件。


    a:打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入。
    ab:以二进制格式打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入。
    a+:打开一个文件用于读写。如果该文件已存在,文件指针将会放在文件的结尾。文件打开时会是追加模式。如果该文件不存在,创建新文件用于读写。
    ab+:以二进制格式打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。如果该文件不存在,创建新文件用于读写。

    3.2 file methods

    file.read([size]):将文件数据作为字符串返回,可选参数size控制读取的字节数
    file.readlines([size]):返回文件中行内容的列表,size参数可选
    file.write(str):将字符串写入文件
    file.writelines(strings):将字符串序列写入文件
    file.close():关闭文件
    file.closed:表示文件已经被关闭,否则为False


    file.mode:Access文件打开时使用的访问模式
    file.encoding:文件所使用的编码
    file.name:文件名
    file.newlines:未读取到行分隔符时为None,只有一种行分隔符时为一个字符串,当文件有多种类型的行结束符时,则为一个包含所有当前所遇到的行结束的列表
    file.softspace:为0表示在输出一数据后,要加上一个空格符,1表示不加。这个属性一般程序员用不着,由程序内部使用

    3.3 demo

    1.案例
    ./ 表示在当前文件夹下,如果没有该文件就自动创建

        with open('./sogou.html', 'w', encoding='UTF-8') as fp:
            page_txt=fp.write()
        print('爬取数据结束!!!')
    
    • 1
    • 2
    • 3

    2.问题
    把运行结果写入文件中,只显示一行
    mdoe select a , not w

    3.问题
    写入文件时乱码,在file=后面加r

        with open(r'./sogou.html', 'w', encoding='UTF-8') as fp:
            page_txt=fp.write()
        print('爬取数据结束!!!')
    
    • 1
    • 2
    • 3
  • 相关阅读:
    解决nomachine扫描不出ip问题
    Awesome-Selfhosted:互联网常见服务开源平替 | 开源日报 No.68
    内网穿透——搭建私人影音媒体平台
    直观全面解释Transformer模型;上海人工智能实验室推出首个图文混合创作大模型浦语灵笔
    JDK1.8 新特性(二)【Stream 流】
    亚马逊应该如何去做?才能月入万+
    vue指令(代码部分)
    云计算的未来:云原生架构和自动化运维的崭露头角
    Spring中事务传播特性(Propagation)
    基于Apache部署虚拟主机网站
  • 原文地址:https://blog.csdn.net/weixin_43916074/article/details/126229427