您当前的位置:首页 > 计算机 > 编程开发 > Python

python爬虫第三章:数据解析(一)正则

时间:11-05来源:作者:点击数:

数据解析

‘r’只读。该文件必须已存在。

‘r+’可读可写。该文件必须已存在,写为追加在文件内容末尾。

‘rb’:表示以二进制方式读取文件。该文件必须已存在。

‘w’只写。打开即默认创建一个新文件,如果文件已存在,则覆盖写(即文件内原始数据会被新写入的数据清空覆盖)。

‘w+’写读。打开创建新文件并写入数据,如果文件已存在,则覆盖写。

‘wb’:表示以二进制写方式打开,只能写文件, 如果文件不存在,创建该文件;如果文件已存在,则覆盖写。

‘a’追加写。若打开的是已有文件则直接对已有文件操作,若打开文件不存在则创建新文件,只能执行写(追加在后面),不能读。

‘a+’追加读写。打开文件方式与写入方式和’a’一样,但是可以读。需注意的是你若刚用‘a+’打开一个文件,一般不能直接读取,因为此时光标已经是文件末尾,除非你把光标移动到初始位置或任意非末尾的位置。(可使用seek() 方法解决这个问题,详细请见下文Model 8 示例)

1.聚焦爬虫:爬取页面中指定的页面内容。

  • 编码流程:
    • 指定url
    • 发起请求
    • 获取响应数据
    • 数据解析
    • 持久化存储

2.数据解析分类

  • 正则
  • bs4
  • xpath(重点)

3.数据解析原理概述·

  • 解析的局部的文本内容都会在标签之间或者标签对应的属性中进行存储
  • 1.进行指定标签的定位
  • 2.标签或者标签对应的属性中存储的数据值进行提取(解析)

1.第一种方法:正则

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

1.解析图片

#解析图片

import requests

if __name__=="__main__":
    #如何爬取图片数据
    url='https://pic.qiushibaike.com/system/pictures/12489/124895193/medium/GSSNE5EFGE2RIU3S.jpg'
    #content返回的是二进制形式的图片数据
    #text(字符串) content(二进制) json()(对象
    img_data=requests.get(url=url).content       #返回的是图片的二进制数据

    with open('qiutu.jpg','wb') as fp:
        fp.write(img_data)

2、批量下载图片

import requests
import re
import os
if __name__=="__main__":
    #创建一个文件夹,保存所有的图片
    if not os.path.exists('qiutulib'):
        os.mkdir('qiutulib')

    url='https://www.qiushibaike.com/imgrank/'
    headers={
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36'
    }

    #使用通用爬虫对url对应的一整张页面进行爬虫
    page=requests.get(url=url,headers=headers).text

    #使用聚焦爬虫将页面中所有的图片进行解析/提取
    ex='<div class="thumb">.*?<img src="(.*?)" alt.*?</div>'
   # ex=re.compile(r'src="(.*?)\.jpg')
    img_src_list=re.findall(ex,page,re.S)  #返回的是列表
    #print(img_src_list)
    for src in img_src_list:
        #拼接出一个完整的图片url
        src='https:'+src
         #请求到图片二进制数据
        img_data=requests.get(url=src,headers=headers).content
        #生成图片名称
        img_name=src.split('/')[-1]
        #图片存储的路径
        imgPath='qiutulib/'+img_name

        with open(imgPath,'wb') as fp:
            fp.write(img_data)
            print(img_name,'下载完成!!!!')

3.多页爬取(设置通用的url)

通用url设置

 #设置一个通用的url模板
    url = 'https://www.qiushibaike.com/imgrank/page/%d/'  #把页数改为%d
    for pagea in range(1,3):
        new_url=format(url%pagea)
        #使用通用爬虫对url对应的一整张页面进行爬虫
        page=requests.get(url=new_url,headers=headers).text
import requests
import re
import os
if __name__=="__main__":
    #创建一个文件夹,保存所有的图片
    if not os.path.exists('qiutulib'):
        os.mkdir('qiutulib')

    headers = {
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36'
    }
    #设置一个通用的url模板
    url = 'https://www.qiushibaike.com/imgrank/page/%d/'  #把页数改为%d

    for pagea in range(1,3):
        new_url=format(url%pagea)

        #使用通用爬虫对url对应的一整张页面进行爬虫
        page=requests.get(url=new_url,headers=headers).text

        #使用聚焦爬虫将页面中所有的图片进行解析/提取
        ex='<div class="thumb">.*?<img src="(.*?)" alt.*?</div>'
       # ex=re.compile(r'src="(.*?)\.jpg')
        img_src_list=re.findall(ex,page,re.S)  #返回的是列表
        #print(img_src_list)
        for src in img_src_list:
            #拼接出一个完整的图片url
            src='https:'+src
             #请求到图片二进制数据
            img_data=requests.get(url=src,headers=headers).content
            #生成图片名称
            img_name=src.split('/')[-1]
            #图片存储的路径
            imgPath='qiutulib/'+img_name

            with open(imgPath,'wb') as fp:
                fp.write(img_data)
                print(img_name,'下载完成!!!!')

方便获取更多学习、工作、生活信息请关注本站微信公众号城东书院 微信服务号城东书院 微信订阅号
推荐内容
相关内容
栏目更新
栏目热门