Python3爬取某乎网站的图片,并保存到本地和数据库(亲测可用)

语言:Python3.7

数据库:mysql

需要导入的工具包,如下:

from urllib.request import urlopen    #注意这里的写法urllib不能直接写为import urllib要加上它的对象request
from bs4 import BeautifulSoup
import re
import time
import pymysql.cursors
import urllib.request

写入数据库需要创建表,代码如下:

CREATE TABLE imgtest(
     id INT PRIMARY KEY AUTO_INCREMENT,
     img LONGBLOB,    -- 图片字段
     content LONGTEXT  -- 文本字段
     
);

#==============实现爬取图片到本地文件夹====================

url = "https://www.zhihu.com/question/22918070"
html = urllib.request.urlopen(url).read().decode('utf-8')
soup = BeautifulSoup(html,'html.parser')
print(soup.prettify())

#用Beautiful Soup结合正则表达式来提取包含所有图片链接(img标签中,class=**,以.jpg结尾的链接)的语句
links = soup.find_all('img',"origin_image zh-lightbox-thumb",src=re.compile(r'.jpg$'))
print(links)

# 设置保存图片的路径,否则会保存到程序当前路径
path = r'D:\pcongfile\images'            #路径前的r是保持字符串原始值的意思,就是说不对其中的符号进行转义
for link in links:
    print(link.attrs['src'])
    #保存链接并命名,time.time()返回当前时间戳防止命名冲突
    urllib.request.urlretrieve(link.attrs['src'],path+'\%s.jpg' % time.time())  #使用request.urlretrieve直接将所有远程链接数据下载到本地
print('==========图片已写本地文件夹==========')

#==============实现爬取图片到本地数据库====================

#请求URL并使用UTF-8编码
resp = urlopen("https://www.zhihu.com/question/22918070").read().decode("utf-8")
#指定一个解析器
soup = BeautifulSoup(resp,"html.parser")
for ListUrl in soup.findAll('img',"origin_image zh-lightbox-thumb",src=re.compile(r'.jpg$')):
    if not re.search("\.(jpg|JPG)$",ListUrl["src"]): #如果不是已jpg或者JPG结尾的才输出
        print(ListUrl.string,"<-------->","https://www.zhihu.com/question/22918070"+ListUrl["src"])

    #获取数据库链接  charset='utf8mb4'
    conn = pymysql.connect(host='localhost', user='root', password='123', db='pytest',port=3306)
    try:
        #获取内容
        with conn.cursor() as cursor:
            sql="insert into`imgtest`(`img`,`content`)values(%s,%s)"
            #执行sql
            cursor.execute(sql,(ListUrl.get_text(),"https://en.wikipedia.org"+ListUrl["src"]))
            conn.commit()  #提交
    finally:
        conn.close()
print('==========图片已写入数据库==========')

本地文件夹效果图:

数据库写入效果:

 

  • 5
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Blogfish

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值