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

萌新爬虫系列01——爬取模型网站作品

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

萌新爬虫系列01——爬取模型网站作品

这是萌新的第一个爬虫,也是萌新发布的第一篇文章。
首先声明一下本萌新在过去一个月内短程突击学习了Python网络爬虫,在此提前一并对倾囊相授,传道授业解惑的各位大神大佬们表示真挚的感谢和崇高的敬意!!!
萌新的第一个爬虫准备对某小众模型网站进行试验:
静态模型爱好者网站链接:http://www.moxingfans.com,又有谁能想到咱也是个胶佬呢?
点击作品,本次要爬取的是网站作品栏目下的作品名录:

1.导入模块
#使用正则表达式爬取静态模型爱好者作品
import json
import re
import requests

需要强调本人爬虫书写习惯为设置class类,此后系列如无必要将不再提醒

class Moxingfans_works:
2.初始化函数

在数据包中找到网址和用户代理:


注意到后翻到第2页时请求url发生了相应的变化,由此推理页数位于请求url对应位置

网址为http://www.moxingfans.com/works/list_21_{}.html,其中大括号内容为页数
由此得出初始化函数:

def __init__(self):
        self.start_url="http://www.moxingfans.com/works/list_21_{}.html"
        self.headers={"User-Agent":"Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0.3809.100 Safari/537.36"}
3.构造url列表

假设有100页

def get_url_list(self):#构造url列表
        url_list=[]
        for i in range(1,100):
            url_list.append(self.start_url.format(i))
        return url_list
4.发送请求,获取响应

经过初步侦察发现作品栏目共有93页,于是设置判断条件:当为空则不返回requests

def parse_url(self,url):#发送请求,获取响应
        response=requests.get(url,headers=self.headers)
        if response:
            return response.content.decode()
        else:
            return ""
5.提取数据

显而易见作品名称都在元素中的title属性中


不妨使用正则表达式:

def get_content_list(self,html_str):#提取数据
        content_list=re.findall(r"alt="(.*?)" />",html_str,re.S)
        return content_list
6.保存
def save_content(self,content_list,page_num):#保存
        with open("作品.txt","a",encoding="utf-8")as f:
            for content in content_list:
                f.write(json.dumps(content,ensure_ascii=False))
                f.write("n")
        print("Page"+str(page_num)+"保存成功")
7.主要逻辑

需要在其中设置页码数,每爬取一页页码数加一

def run(self):#实现主要逻辑
        url_list=self.get_url_list()
        for url in url_list:#遍历,发送请求,获取响应
            html_str=self.parse_url(url)
            content_list=self.get_content_list(html_str)#提取数据
            page_num=url_list.index(url)+1#页码数
            self.save_content(content_list,page_num)#保存
8.主函数
if __name__=="__main__":
    moxingfans_works=Moxingfans_works()
    moxingfans_works.run()
9.大功告成

爬虫完整内容如下:

#使用正则表达式爬取静态模型爱好者作品
import json
import re
import requests

class Moxingfans_works:
    def __init__(self):
        self.start_url="http://www.moxingfans.com/works/list_21_{}.html"
        self.headers={"User-Agent":"Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0.3809.100 Safari/537.36"}

    def get_url_list(self):#构造url列表
        url_list=[]
        for i in range(1,100):
            url_list.append(self.start_url.format(i))
        return url_list

    def parse_url(self,url):#发送请求,获取响应
        response=requests.get(url,headers=self.headers)
        if response:
            return response.content.decode()
        else:
            return ""

    def get_content_list(self,html_str):#提取数据
        content_list=re.findall(r"alt="(.*?)" />",html_str,re.S)
        return content_list

    def save_content(self,content_list,page_num):#保存
        with open("作品.txt","a",encoding="utf-8")as f:
            for content in content_list:
                f.write(json.dumps(content,ensure_ascii=False))
                f.write("n")
        print("Page"+str(page_num)+"保存成功")

    def run(self):#实现主要逻辑
        url_list=self.get_url_list()
        for url in url_list:#遍历,发送请求,获取响应
            html_str=self.parse_url(url)
            content_list=self.get_content_list(html_str)#提取数据
            page_num=url_list.index(url)+1#页码数
            self.save_content(content_list,page_num)#保存

if __name__=="__main__":
    moxingfans_works=Moxingfans_works()
    moxingfans_works.run()

爬取后内容部分展示:

"1/700 密苏里号战列舰1944 "
"1/35 肖特卡尔1973年"
"流浪地球CN171号运兵车载具"
"豹2A6 前期型,演习模式"
"1/700 俾斯麦号战列舰 波罗地海涂装"
"不列颠空战——田宫1/48喷火MK.I VS BF109 E-4"
"挑战者2型主战坦克2003伊拉克战争"
"1/35 BF109 G-6哈特曼座机"
"1/350 BB-63 密苏里号战列舰"
"1/35 amx1390"
"苏联飞毛腿-B导弹发射车"
"梅卡瓦3D"
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/349700.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

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

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