赞
踩
通过网站源码获取想要的数据。
使用pycharm软件。
- import urllib.request, urllib.error
- from bs4 import BeautifulSoup
- import re
- import xlwt
- # 定义url
- baseurl = "https://www.58pic.com/newicon/76829.html?svg_type=1&kw=0&pinyin=0"
- # 定义正则对象获取指定的内容
- # 提取图片
- findImgSrc = re.compile(r'<img alt="" src="([A-Za-z0-9:/._?=&;-]*?=)"', re.S)
- # 定义函数得到指定url网页的内容
- def geturl(url):
- # 自定义headers(描述访问服务器的机器类型)
- headers = {
- 'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.82 Safari/537.36'
- }
- # Request类构造请求
- req = urllib.request.Request(url, headers=headers)
- # 定义一个接收变量,用于接收
- html = ""
- try:
- # urlopen()方法的参数,发送给服务器并接收响应
- resp = urllib.request.urlopen(req)
- # urlopen()获取页面内容,返回的数据格式为bytes类型,需要decode()解码,转换成str类型
- html = resp.read().decode("utf-8", "ignore")
- except urllib.error.URLError as e:
- if hasattr(e, "code"):
- print(e.code)
- if hasattr(e, "reason"):
- print(e.reason)
- return html

分为以下几部分:
- # 定义函数获取源数据
- def getsrcdata(baseurl):
- # 获取网页源码
- html = geturl(baseurl)
- # 指定解析器解析html,注意此处使用html5lib解析会导致仅解析h5的内容从而使后面正则匹配失败
- soup = BeautifulSoup(html, "html.parser")
- # 定位数据块 img标签,匹配alt描述为空内容的数据
- item = soup.find_all('img', {'alt': ''})
- # 定义一个列表 来存储初筛出来的内容
- data = []
- # 循环进行第二次数据正则处理
- for item in item:
- # item转为字符串操作
- itemt = str(item)
- # 干掉转义字符组&
- itemt = itemt.replace("&", "&")
- # 打印初筛内容
- print(itemt)
- # 进行第二次数据处理,防止读取越界使用try
- try:
- # 正则匹配扒出链接
- img = re.findall(findImgSrc, itemt)[0]
- # 添加入表
- data.append(img) # 添加图片链接
- except IndexError:
- pass
- return data

分为以下几部分:
- def main():
- # 1 获取数据源
- data = getsrcdata(baseurl)
- # 2 存储数据
- # 存储文件名称
- savepath = "svglib.xls"
- # 创建Workbook对象
- book = xlwt.Workbook(encoding="utf-8", style_compression=0)
- # 创建工作表
- sheet = book.add_sheet("ref", cell_overwrite_ok=True)
- # 列名
- col = ("链接")
- # 工作簿列明写入 坐标0,0
- sheet.write(0, 0, col)
- # 循环打印数据源 复查
- for ite in data:
- print(ite)
- # 循环写入数据源
- for i in range(0, len(data)):
- print('正在保存第' + str((i + 1)) + '条')
- # 从表中取一条
- datat = data[i]
- # 写入工作簿 坐标i+1,0
- sheet.write(i + 1, 0, datat)
- # 保存
- book.save(savepath)

分为以下几部分:
- if __name__ == "__main__":
- main()
静态网页爬取不难,主要牢记以上几个步骤,以及善用引入的库。
对于正则,可以自己经常编写python样例练习与测试结果。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。