栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

爬虫小总结

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

爬虫小总结

目录

一、需求分析

二、案例

1、斗图拉

        ①验证获取到的响应信息

        ②获取图片地址

        ③下载图片 

        ④保存到文件中

        ⑤项目源码

2、XX荣耀英雄皮肤

        ①需求

        ②详情页链接获取

         ③检验详情页响应数据

        ④保存到文件

        ⑤源码

三、总结


一、需求分析

通过两个案例分析比较并对爬虫的整体步骤及方法的小总结

二、案例

1、斗图拉

        ①验证获取到的响应信息

                在之前的文章中提到过,有两种方式

        一种是通过获取网页的步骤得到返回的信息,然后检查信息是否是想要的信息(不建议),当数据复杂时此方法不仅耗时而且其结果并不明显;

另一种就是通过浏览器自带的抓包工具(也就是右键的检查),通过抓包得到的响应数据去验证其页面的信息是否符合

        ②获取图片地址

        通过抓包工具中找到了图片地址所在的标签,然后再通过寻找规律去用xpath去获得其表达式(前提条件是通过爬虫得到的数据就是此数据,如果爬取到的数据不是此数据,那么其表达式就是无效的)

         仔细对比发现,元素中的图片地址存储在img标签下的src中,但是响应的图片地址的数据在img的original,此时就出现了差别,这时就要以爬取到的响应信息为主;此时的xpath插件就失效了,因为它所查找的是元素里面的信息,而得到的是响应的数据,会有偏差;

 

        ③下载图片 

        获取图片的地址只是第一步,目的是为了图片;得到的图片地址并不是完整的,需要对其进行拼接,拼接之后才能作为url去重新获取其图片的信息;

        ④保存到文件中

        根据得到的图片地址,以及图片名称将图片存储到文件中

        ⑤项目源码
# -*- coding: utf-8 -*-
from lxml import etree
import requests
import os
if __name__ == '__main__':
    if not os.path.exists('./doutu'):
        os.mkdir('./doutu')
    url = 'https://dou.yuanmazg.com/doutu?page=1'
    headers = {
        'User-Agent': 'Mozilla  /5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/101.0.4951.67 Safari/537.36'
    }
    page_text = requests.get(url=url,headers=headers).content
    tree = etree.HTML(page_text)
    all = tree.xpath('//div[@]/a')
    for i in all[1:]:
        img_url = 'https://dou.yuanmazg.com/' + i.xpath('./img/@data-original')[0]
        name = i.xpath('./img/@alt')[0] + '.jpg'
        if img_url.endswith('.jpg'):#获取图片为.jpg的不要gif的
            img_data = requests.get(url=img_url,headers=headers).content
            img_path = 'doutu/'+ name
            with open(img_path,'wb') as fp:
                fp.write(img_data)
                print(name,'下载成功')



2、XX荣耀英雄皮肤

        ①需求

        从全部英雄页开始,得到英雄的图片

        ②详情页链接获取

        通过观察发现,每个详情页链接只有细微的差别,也就是一个编号的差距;

        通过对响应的数据的判断,我们想要的数据并不在其中,所以还需要继续查找所需要的编号

         最后在一个json文件中找到了想要的数据(提示:很多的网页的图片加载都不是直接写在网页源码中的,而是通过动态加载的方式来呈现的,而动态加载就要在XHR中去寻找了)

         ③检验详情页响应数据

 

        通过对比发现,页面源码和请求到的页面信息并不一致,所以此时用XPATH并不能得到想要的效果(大多数情况返回的是空值) 

        通过比较两张图的信息,以及验证图片地址,发现其URL是有规律的,得到URL之后就可以得到其图片数据了

        ④保存到文件

        因为图片保存的是英雄的皮肤信息,每个英雄会有多个皮肤,所以要分别对每个英雄建立一个文件夹,然后将皮肤信息保存到其中

        ⑤源码
# -*- coding: utf-8 -*-
from lxml import etree
import requests
import os
if __name__ == '__main__':
    if not os.path.exists('./wangzhe'):#判断文件是否存在
        os.mkdir('./wangzhe')
    url = 'https://pvp.qq.com/web201605/js/herolist.json'
    headers = {
        'User-Agent': 'Mozilla  /5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/101.0.4951.67 Safari/537.36'
    }
    page_list = requests.get(url=url,headers=headers).json()#得到JSON数据
    for page in page_list:
        url = 'https://pvp.qq.com/web201605/herodetail/' + str(page['ename']) +'.shtml'#得到详情页的URL
        url_page = requests.get(url=url,headers=headers).content
        tree = etree.HTML(url_page)
        num = tree.xpath('//div[@]//ul/@data-imgname')[0]
        a = str(num).split('|')
        names = tree.xpath('//div[@]//h2/text()')[0]
        file_path = './wangzhe/' + names
        if not os.path.exists(file_path):#创建每个英雄的文件夹
            os.mkdir(file_path)
        for index,j in enumerate(a):
            url = 'https://game.gtimg.cn/images/yxzj/img201606/heroimg/'+ str(page['ename'])+'/'+str(page['ename'])+'-smallskin-'+str(index+1)+'.jpg'#拼接图片的URL
            img_data = requests.get(url=url,headers=headers).content
            name = j.split('&')[0] +'.jpg'
            img_path = file_path + '/'+name
            with open(img_path, 'wb') as fp:#保存到对应的文件中
                fp.write(img_data)
                print(name, '爬取完成')




三、总结

①首先根据想要的内容去寻找到对应的URL(有可能是动态加载的)

②检查响应页面的数据与页面源码是否一致(数据解析时很关键,特别是使用xpath时)

③仔细观察,寻找其中的规律,然后得到想要的结果

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/969096.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号