• python简单实现网络爬虫


    前言

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

    要用到的知识

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

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

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

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

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

    爬虫的具体实现

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

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

    1. obj = re.compile(r'(?P.*?).*?'
    2. r'.*?)".*?>'
    3. r'.*?)".*?>', re.S)

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

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

    1. obj1 = re.compile(r'(?P.*?)', re.S)
    2. obj2 = re.compile(r'.*?)".*?>', re.S)
    3. obj3 = re.compile(r'.*?)".*?>', 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'(?P.*?)', re.S)
    25. obj2 = re.compile(r'.*?)".*?>', re.S)
    26. obj3 = re.compile(r'.*?)".*?>', 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文件查看是否将数据写入文件中:

    结语

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

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

            

  • 相关阅读:
    Zookeeper从入门到精通
    面试的一些问题关于k8s中,镜像自动化脚本
    计算机毕业设计ssm人力资源管理系统0600t系统+程序+源码+lw+远程部署
    oracle统计信息
    Oracle收集统计信息的一些思考
    怎么优化H5让它可以在300ms以内打开?
    【环境搭建】linux docker-compose安装seata1.6.1,使用nacos注册、db模式
    全链路追踪体验—TraceId的生成
    共享店铺系统如何搭建无人共享自习室?
    Amazon S3 对象存储Java API操作记录(Minio与S3 SDK两种实现)
  • 原文地址:https://blog.csdn.net/xiexieyuchen/article/details/128193159