当前位置:   article > 正文

【python】分析静态网页内容与获取_抓取静态网站 python

抓取静态网站 python

一、需求

通过网站源码获取想要的数据。

二、操作步骤

使用pycharm软件。

1.引入相关库

  1. import urllib.request, urllib.error
  2. from bs4 import BeautifulSoup
  3. import re
  4. import xlwt

2.全局变量

2.1要获取的网址url。

  1. # 定义url
  2. baseurl = "https://www.58pic.com/newicon/76829.html?svg_type=1&kw=0&pinyin=0"

2.2链接正则。

  1. # 定义正则对象获取指定的内容
  2. # 提取图片
  3. findImgSrc = re.compile(r'<img alt="" src="([A-Za-z0-9:/._?=&;-]*?=)"', re.S)

3.函数

3.1网页源码获取函数

  1. # 定义函数得到指定url网页的内容
  2. def geturl(url):
  3. # 自定义headers(描述访问服务器的机器类型)
  4. headers = {
  5. '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'
  6. }
  7. # Request类构造请求
  8. req = urllib.request.Request(url, headers=headers)
  9. # 定义一个接收变量,用于接收
  10. html = ""
  11. try:
  12. # urlopen()方法的参数,发送给服务器并接收响应
  13. resp = urllib.request.urlopen(req)
  14. # urlopen()获取页面内容,返回的数据格式为bytes类型,需要decode()解码,转换成str类型
  15. html = resp.read().decode("utf-8", "ignore")
  16. except urllib.error.URLError as e:
  17. if hasattr(e, "code"):
  18. print(e.code)
  19. if hasattr(e, "reason"):
  20. print(e.reason)
  21. return html

 分为以下几部分:

  • 包装访问头
  • 发送请求至网站
  • 获取内容
  • 转码
  • 输出

 3.2数据处理函数

  1. # 定义函数获取源数据
  2. def getsrcdata(baseurl):
  3. # 获取网页源码
  4. html = geturl(baseurl)
  5. # 指定解析器解析html,注意此处使用html5lib解析会导致仅解析h5的内容从而使后面正则匹配失败
  6. soup = BeautifulSoup(html, "html.parser")
  7. # 定位数据块 img标签,匹配alt描述为空内容的数据
  8. item = soup.find_all('img', {'alt': ''})
  9. # 定义一个列表 来存储初筛出来的内容
  10. data = []
  11. # 循环进行第二次数据正则处理
  12. for item in item:
  13. # item转为字符串操作
  14. itemt = str(item)
  15. # 干掉转义字符组&amp;
  16. itemt = itemt.replace("&amp;", "&")
  17. # 打印初筛内容
  18. print(itemt)
  19. # 进行第二次数据处理,防止读取越界使用try
  20. try:
  21. # 正则匹配扒出链接
  22. img = re.findall(findImgSrc, itemt)[0]
  23. # 添加入表
  24. data.append(img) # 添加图片链接
  25. except IndexError:
  26. pass
  27. return data

分为以下几部分:

  • 解释器对网页源码解析
  • 针对标签进行初筛
  • 使用正则表达式进行细筛
  • 存入表后输出

3.3数据保存函数(main函数)

  1. def main():
  2. # 1 获取数据源
  3. data = getsrcdata(baseurl)
  4. # 2 存储数据
  5. # 存储文件名称
  6. savepath = "svglib.xls"
  7. # 创建Workbook对象
  8. book = xlwt.Workbook(encoding="utf-8", style_compression=0)
  9. # 创建工作表
  10. sheet = book.add_sheet("ref", cell_overwrite_ok=True)
  11. # 列名
  12. col = ("链接")
  13. # 工作簿列明写入 坐标0,0
  14. sheet.write(0, 0, col)
  15. # 循环打印数据源 复查
  16. for ite in data:
  17. print(ite)
  18. # 循环写入数据源
  19. for i in range(0, len(data)):
  20. print('正在保存第' + str((i + 1)) + '条')
  21. # 从表中取一条
  22. datat = data[i]
  23. # 写入工作簿 坐标i+1,0
  24. sheet.write(i + 1, 0, datat)
  25. # 保存
  26. book.save(savepath)

分为以下几部分:

  • 获取数据源
  • 使用xlwt创建工作簿
  • 按坐标逐数据写入
  • 保存

3.4main引导

  1. if __name__ == "__main__":
  2. main()

四、总结

静态网页爬取不难,主要牢记以上几个步骤,以及善用引入的库。

对于正则,可以自己经常编写python样例练习与测试结果。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Li_阴宅/article/detail/1006838
推荐阅读
相关标签
  

闽ICP备14008679号