IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Python知识库 -> 萌新爬虫系列01——爬取模型网站作品 -> 正文阅读

[Python知识库]萌新爬虫系列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=\"(.*?)\" /></a></div>",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=\"(.*?)\" /></a></div>",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"
  Python知识库 最新文章
Python中String模块
【Python】 14-CVS文件操作
python的panda库读写文件
使用Nordic的nrf52840实现蓝牙DFU过程
【Python学习记录】numpy数组用法整理
Python学习笔记
python字符串和列表
python如何从txt文件中解析出有效的数据
Python编程从入门到实践自学/3.1-3.2
python变量
上一篇文章      下一篇文章      查看所有文章
加:2021-10-28 12:20:59  更:2021-10-28 12:21:26 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年12日历 -2024/12/30 4:29:22-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码