简单爬虫爬取网络图片

本文介绍了使用Python的requests和BeautifulSoup库抓取网页HTML内容,并通过lxml解析HTML,提取图片链接和描述。同时,利用pymysql将数据存储到MySQL数据库中。示例代码展示了如何进行分页爬取并批量导入数据库。
摘要由CSDN通过智能技术生成

使用环境:

  • Windows10。
  • Python版本Python3.9.5 下载地址 https://www.python.org/downloads/release/python-395/
  • IDE我使用的是PyCharm,是专门为Python开发的IDE。这是JetBrians的产品

1.获取到HTML内容

requests

英文官方文档中文官方文

安装命令:(直接黑窗口,或者PyCharm工具的 Terminal 窗口执行命令即可)

pip install requests

python代码:

import requests #引入requests库
r = requests.get('https://www.bilibili.com/video/BV1G4411L7Ek?p=7') #像目标url地址发送get请求,返回一个response对象
print(r.text) #r.text是http response的网页HTML

使用request库,向网站发送http请求,获取到HTML内容

2.从HTML获取目标数据

lxml

安装lxml,这是一个解析器,BeautifulSoup可以使用它来解析HTML,然后提取内容

安装命令(安装lxml的时候,总是安装失败,这个时候,我们可以换一个库进行安装,这里使用的是豆瓣 ):

pip install -i https://pypi.douban.com/simple lxml

BeautifulSoup

BeautifulSoup 有多个版本,我们使用BeautifulSoup4

BeautifuSoup4官方文档

BeautifulSoup4.4.0中文官方文档 BeautifulSoup4.2.0中文官方文档

不同版本的用法差不多,几个常用的语法都一样

安装命令:(直接黑窗口,或者PyCharm工具的 Terminal 窗口执行命令即可)

pip install beautifulsoup4

使用BeautifulSoup模块来从HTML文本中提取我们想要的数据。

如果不安装lxml,则BeautifulSoup会使用Python内置的解析器对文档进行解析。之所以使用lxml,是因为它速度快。

文档解析器对照表如下:

解析器

使用方法

优势

劣势

Python标准库

BeautifulSoup(markup,"html.parser")

1. Python的内置标准库

2. 执行速度适

3. 中文档容错能力强

Python 2.7.3 or 3.2.2)前 的版本中文档容错能力差

lxml HTML 解析器

BeautifulSoup(markup,"lxml")

1. 速度快

2. 文档容错能力强

需要安装C语言库

lxml XML 解析器

BeautifulSoup(markup,["lxml-xml"])

BeautifulSoup(markup,"xml")

1. 速度快

2. 唯一支持XML的解析器

需要安装C语言库

html5lib

BeautifulSoup(markup,"html5lib")

1. 最好的容错性

2. 以浏览器的方式解析文档

3. 生成HTML5格式的文档

速度慢,不依赖外部扩展

pymysql

是用来连接python和mysql之间的通道,在使用python编程时,通过它来和mysql数据库进行交互

安装命令:

pip install pymysql

直接对HTML进行解析,随后对类似分页的数据不断分页获取,进行解析获得相应图片地址及描述,代码如下:

import requests
from bs4 import BeautifulSoup
import pymysql
import uuid
#模拟浏览器访问头信息
headers = {
    'User-Agent':'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36 QIHU 360SE'
}
for page in [1,2,3,4,5,6,7,8,9,10]:
    html_doc = requests.post('https://某某网站.com/pic_space5?page='+str(page), headers=headers) #像目标url地址发送get请求,返回一个response对象
    #print(html_doc.text) #html_doc.text是http response的网页HTML
    soup = BeautifulSoup(html_doc.text, 'lxml')  #声明BeautifulSoup对象
    #使用find方法查到img标签
    for k in soup.find_all(name="img" ):
          if k['src'] != '':
              if  str(k['src']).startswith("https:"):
                 print(k['alt'])
                 print(k['src'])
                 conn = pymysql.connect(host='localhost', user='root', password='123456', database='decorate')  # 创建数据库连接
                 cursor = conn.cursor()  # 创建游标
                 sql = "insert into img_info(img_id,img_desc,img_name,img_src,img_type,img_source) values ('" + str(uuid.uuid1())+"','"+k['alt']+"','"+k['alt']+"','"+k['src']+"','0003','土巴兔')"  # 要执行的sql语句
                 print(sql)
                 resu = cursor.execute(sql) # 提交sql语句
                 conn.commit()  # 提交缓存
                 cursor.close()  # 关闭游标
                 conn.close()  # 关闭数据库连接
                 if resu ==1:
                     print("导入数据库成功!")

以上还需进行优化,因为也是初次接触,所以没有过多处理,有更好方法解析还请指教!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值