定制化开发python简单实现网络爬虫

前言

        定制化开发在这一篇博客中,我会用python定制化开发来实现一个简单的。定制化开发简单的爬取一下一些音乐网站、定制化开发小说网站的标题、定制化开发关键字还有摘要!定制化开发所以这个爬虫并不是万能爬,定制化开发只针对符合特定规则的网站使用。(定制化开发只使用于爬标题、关键字和摘要的,所以只能爬在head标签中这三个信息都有的且meta标签中name参数在本文信息前面的网站。)希望大家看了这篇博客,能对大家学习爬虫有些帮助!(并不是很高深的爬虫,很基础!!!)

要用到的知识

        要用到的知识都是比较简单的啦,基本上花点时间都能学会。

        首先就是python的基础语法啦,会用能看懂就好。(会有一些文件读取的操作)

        还有就是关于爬虫的一些知识了:贪婪匹配和惰性匹配(re解析方式解析网页源代码)

        还需要一丢丢前端的知识:只需要大概看得懂html源代码就行(知道是在干嘛的)

        这些就差不多了(b站是最好的大学(主要是我懒,也没时间写这些))

爬虫的具体实现

        先拿一个网站做例子分析,打开酷狗官网,右键点击检查:

         红框中的就是我们需要提取的信息啦。这还是很容易提取出来的。使用re模块里面的贪婪匹配与惰性匹配,将想要的数据提取出来就好。例如:

  1. obj = re.compile(r'<title.*?>(?P<title>.*?)</title>.*?'
  2. r'<meta.*?name="keywords".*?content="(?P<keywords>.*?)".*?>'
  3. r'<meta.*?name="description".*?content="(?P<description>.*?)".*?>', re.S)

        在上面我们只用了一次compile函数就完成了匹配。

        但是我,我们需要提取的并不止是酷狗官网,还有其他一些网站。上面代码写的规则并不适合一些网站,比如,一些网站把标题放在最后面,关键字和摘要放在前面,那么我们就匹配不到想要的信息。这个也比较好解决,将一条compile拆成多条compile就行。

  1. obj1 = re.compile(r'<title.*?>(?P<title>.*?)</title>', re.S)
  2. obj2 = re.compile(r'<meta.*?name="keywords".*?content="(?P<keywords>.*?)".*?>', re.S)
  3. obj3 = re.compile(r'<meta.*?name="description".*?content="(?P<description>.*?)".*?>', re.S)

        下面是整个python源代码(在源代码里面使用了文件读取将提取到的信息保存到文件里面):

  1. import requests
  2. import re
  3. import csv
  4. urls = []
  5. # 分别是酷狗音乐、酷我音乐、网易云音乐、起点中文网、咪咕音乐、bilibili、qq音乐
  6. urls.append("https://www.kugou.com/")
  7. urls.append("http://www.kuwo.cn/")
  8. urls.append("https://music.163.com/")
  9. urls.append("https://www.qidian.com/")
  10. urls.append("https://www.migu.cn/index.html")
  11. urls.append("https://www.bilibili.com/")
  12. urls.append("https://y.qq.com/")
  13. # 打开csv文件
  14. f = open("test.csv", mode="w", encoding="utf-8")
  15. csvwriter = csv.writer(f)
  16. csvwriter.writerow(["标题","关键字","摘要"])
  17. # 对所有网站进行get访问,获取源代码后用re模块将想要提取的内容提取出来
  18. for url in urls:
  19. # 向网页发出请求
  20. resp = requests.get(url)
  21. # 设置字符编码
  22. resp.encoding = 'utf-8'
  23. # 使用非贪婪匹配.*?(惰性匹配),re.S用来匹配换行符
  24. obj1 = re.compile(r'<title.*?>(?P<title>.*?)</title>', re.S)
  25. obj2 = re.compile(r'<meta.*?name="keywords".*?content="(?P<keywords>.*?)".*?>', re.S)
  26. obj3 = re.compile(r'<meta.*?name="description".*?content="(?P<description>.*?)".*?>', re.S)
  27. # 对网页源代码进行匹配
  28. result1 = obj1.finditer(resp.text)
  29. result2 = obj2.finditer(resp.text)
  30. result3 = obj3.finditer(resp.text)
  31. # 创建一个队列来将数据保存,方便写入csv文件中
  32. lis = []
  33. for it in result1:
  34. #print("标题:",it.group("title"))
  35. lis.append(it.group("title"))
  36. for it in result2:
  37. #print("关键字:",it.group("keywords"))
  38. lis.append(it.group("keywords"))
  39. for it in result3:
  40. #print("摘要:",it.group("description"))
  41. lis.append(it.group("description"))
  42. print(lis)
  43. print()
  44. # 将队列写入csv文件
  45. csvwriter.writerow(lis)
  46. # 关闭请求
  47. resp.close()
  48. print('over!')
  49. # 关闭文件指针
  50. f.close()

        下面是运行结果图:

        用WPS打开这个csv文件进行查看: 

         在pycharm中打开csv文件查看是否将数据写入文件中:

结语

        好矛盾好纠结,又想把思路写清楚又感觉没必要。。。。。。

        感谢浏览这篇博客,希望这篇博客的内容能对你有帮助。

 

        

网站建设定制开发 软件系统开发定制 定制软件开发 软件开发定制 定制app开发 app开发定制 app开发定制公司 电商商城定制开发 定制小程序开发 定制开发小程序 客户管理系统开发定制 定制网站 定制开发 crm开发定制 开发公司 小程序开发定制 定制软件 收款定制开发 企业网站定制开发 定制化开发 android系统定制开发 定制小程序开发费用 定制设计 专注app软件定制开发 软件开发定制定制 知名网站建设定制 软件定制开发供应商 应用系统定制开发 软件系统定制开发 企业管理系统定制开发 系统定制开发