当前位置: 首页 > news >正文

Python:简单的爬虫程序,从web页面爬取图片与标题并保存MySQL

文章目录

  • 一、环境说明
  • 二、基本思路
  • 三、代码

一、环境说明

python 版本:3.10
MySQL版本:8

二、基本思路

首先,我们需要查看网页源代码
通过html源码,确定我们要抓取的内容所在标签的特点

然后,利用BeautifulSoup进行html代码解析
在逐一获取我们需要的标签即可。

最后,将图片下载到本地,基本信息保存到MySQL

三、代码

import os  # 同来创造文件夹
import requests  # 发送请求和得到响应用的
from bs4 import BeautifulSoup  # 用来解析回应的数据
import MySQLdb


def GetHtmlText(url):  # 得到响应数据
    try:
        r = requests.get(url)  # 发送url
        r.raise_for_status()  # 判断是否成功
        r.encoding = 'utf-8'  # 设置编码格式
        return r.text  # 返回他的响应数据
    except:
        return ''


def main(pages):
    filepath = os.getcwd() + '\myImgs\\'  # 创造一个文件夹
    if not os.path.exists(filepath):  # 如果没有则创造
        os.makedirs(filepath)

    #创建数据库连接
    db = MySQLdb.connect('127.0.0.1', 'root', 'root', port=3306, db='test')
    cur = db.cursor()

    pagenum = pages  # 要爬取的页数
    fnum = 1
    img_url = ""
    context = ""
    local_path = ""
    for page in range(pages):
        url = "https://www.百度.com/news/?page=" + str(page+1)  # 第几页
        print(url)
        html = GetHtmlText(url) # 获取网页html源码
        # r = requests.get(url)
        soup = BeautifulSoup(html, 'html.parser', from_encoding='utf-8')  # html.parser是解析器

        contexts = soup.find_all(name='div', attrs={'class': ['card card--standard js-card']})  # 根据class值,获取对应的div
        # print(contexts[0].text)  # 获取图片地址
        for item in contexts:
            # detail_url = item.get('href')
            print(item.text)
            context = item.text     #读取标签内容
            images = item.find_all(name='img', attrs={'width': ['368']})
            for img in images:
                imgurl = img.get('src')     #获取图片url地址
                print(imgurl)
                img_url = imgurl
                imgcontent = requests.get(imgurl).content  # 得到这个url下的内容content,应该是二进制的
                filename = str(fnum) + '.jpg'
                local_path = filepath + filename
                with open(filepath + filename, 'wb') as wf:  # 二进制形式写入数据
                    wf.write(imgcontent)
                    sql = "INSERT INTO `test`.`py_news` (`img_url`, `context`, `local_path`) VALUES ( '" + img_url + "', '" + context + "', '" + local_path + "');"
                    cur.execute(sql)  # 引号中为SQL语句
                fnum += 1

    # 关闭数据库连接
    cur.close()
    db.close()

if __name__ == '__main__':
    main(1)

http://www.dtcms.com/a/51971.html

相关文章:

  • 大模型核心要素完全解析:从数字神经元到智能对话的奥秘
  • go语言数据类型
  • (50)[HGAME 2023 week2]before_main
  • AutoGen学习笔记系列(六)Tutorial - Termination
  • unittest框架 核心知识的系统复习及与pytest的对比
  • uniapp x 学习之 uts 语言快速入门
  • 【Embedding】何为Embedding?
  • 筑牢网络安全防线:守护您的数据安全
  • 单体架构、集群、分布式、微服务的区别!
  • Redis设计与实现-数据结构
  • Selenium遇到Exception自动截图
  • 【大模型学习】第八章 深入理解机器学习技术细节
  • 【前端】【vue-i18n】安装和使用全解
  • Redis Stream
  • Ubuntu20.04 在离线机器上安装 NVIDIA Container Toolkit
  • [项目]基于FreeRTOS的STM32四轴飞行器: 三.电源控制
  • llama-factory || AutoDL平台 ||启动web界面
  • LeetCode1328
  • 【JavaScript】《JavaScript高级程序设计 (第4版) 》笔记-附录C-JavaScript 库和框架
  • 驱动开发系列43 - Linux 显卡KMD驱动代码分析(四)- DRM设备操作
  • [AI]从零开始的so-vits-svc歌声推理及混音教程
  • 智能汽车制造:海康EasyNVR多品牌NVR管理平台实现无插件视频监控直播方案
  • 数字IC后端实现教程| Clock Gating相关clock tree案例解析
  • 构建自己的AI客服【根据用户输入生成EL表达式】
  • iOS安全和逆向系列教程 第16篇:Frida入门与高级应用
  • sql sqlserver的进程资源查看,杀掉多余进程
  • 非平稳时间序列分析(三)——季节模型(SARIMA、STL、Holt-Winters)
  • 盛铂科技SCP4000射频微波功率计与SPP5000系列脉冲峰值 USB功率计 区别
  • VSCode配置优化指南:打造高效开发环境的终极实践
  • 从开发和对抗的角度思考web网页中的接口逆向