欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

【浅谈python爬虫1】基于正则表达式的基础爬虫——爬取排行榜榜单内容

程序员文章站 2022-05-02 17:37:28
...

大家好,我是好学的小师弟。今天来和大家分享下,我近期工作的一个学习心得——爬虫。虽然之前也有过爬虫的学习,但是那基本上都是基于图片的爬取。这次学习心得,算是一个小小的提升吧。


主要分3讲:1.基于正则表达式的爬虫——爬取排行榜榜单内容

                    2.基于lxml库的etree方法结合xpath方法——爬取排行榜榜单内容并生成榜单词云图

                    3.基于调用接口爬取排行榜单的爬虫方法并将爬取内容保存至csv文件


基于正则表达式的爬虫——爬取排行榜榜单内容

思路:将网站内容全部打印下来,分析标签之间的共同点,通过正则表达式提取标签内容,将每一块内容(例“标题”、“作者”)都单独写好,最后进行汇总

优点:思路简洁明了

缺点:实施起来比较麻烦(要是不麻烦,我应该也不会想其他方法了,笑哭)


步骤:1.输入想要爬取内容的网页网址,构建请求头,打印页面text内容

import requests
import re
#爬取csdn   python领域排行榜
csdn_python_url='https://blog.csdn.net/nav/python'
#构建请求头
headers={'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.159 Safari/537.36'}
python_yemian=requests.get(url=csdn_python_url,headers=headers)
python_yemian=python_yemian.text
#打印一下text内容
print(python_yemian)

2.通过观察打印出来的标签内容,构造正则表达式,获取想要的内容。

<h2>
                        <a href="https://blog.csdn.net/u014534808/article/details/121297580" target="_blank" data-report-click='{"mod":"popu_459","extra":"{\"utm_medium\":\"distribute.pc_category.none-task-blog-hot-1.nonecase\",\"dist_request_id\":\"1636976746935_84791\"}","dist_request_id":"1636976746935_84791","ab_strategy":"default","index":"1","strategy":"hot","dest":"https:\/\/blog.csdn.net\/u014534808\/article\/details\/121297580"}' data-report-query='utm_medium=distribute.pc_category.none-task-blog-hot-1.nonecase&depth_1-utm_source=distribute.pc_category.none-task-blog-hot-1.nonecase' >
                                                        记一次性能优化的心酸历程【Flask+Gunicorn+pytorch+多进程+线程池,一顿操作猛如虎】                                                    </a>
                    </h2>

这里我们想要的就是a标签的文本内容,所以我们构造了如下这个正则表达式

rebang_name=re.findall('<a href=.*?nonecase.*?>\n(.*?)</a>',python_yemian)

"""
可以看到这里有个\n换行符号,这是因为我们的标签内容里面也有换行,所以我们要和她一致


"""

因为打印出来的热榜文章标题是列表,所以我们要把他转变为字符串。

注意:这里转变为字符串的时候,你会发现内容前后都有空格,所以我们可以用replace的方法,取消空格。

['                                                        记一次性能优化的心酸历程【Flask+Gunicorn+pytorch+多进程+线程池,一顿操作猛如虎】                                                    ', '                                                        数据可视化之美 -- 以Matlab、Python为工具                                                    ']
#列表转变为字符串

rebang_text=','.join(rebang_name)
#通过replace将空格取消
rebang_text=rebang_text.replace(' ','')
#通过split函数再将字符串转变为字符串列表
rebang_text=rebang_text.split(',')
#打印
print(rebang_text)

完整代码:

import requests
import re

csdn_python_url='https://blog.csdn.net/nav/python'
headers={'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.159 Safari/537.36'}
python_yemian=requests.get(url=csdn_python_url,headers=headers)
python_yemian=python_yemian.text
rebang_name=re.findall('<a href=.*?nonecase.*?>\n(.*?)</a>',python_yemian)
print(python_yemian)
print(rebang_name)
rebang_text=','.join(rebang_name)
rebang_text=rebang_text.replace(' ','')
rebang_text=rebang_text.split(',')
print(rebang_text)

效果图:

['记一次性能优化的心酸历程【Flask+Gunicorn+pytorch+多进程+线程池,一顿操作猛如虎】', '数据可视化之美--以Matlab、Python为工具', '【三万粉丝终极福利】Python、C、Java三大语言学习路线和资源整理', '我,27岁,程序员,10月无情被辞:想给学python的人提个醒......', '用python实现自动扫雷', '将python项目打包成exe和安装包', '秀的一批,那些你不得不知的Python杀手级框架', 'Python自动化必会技能-Excel文件读取', '【渗透测试自学系列】&mdash;&mdash;邮件协议是如何被安全人员利用的?', '每日一算法(22)', '如何将照片或者视频中的背景图抠掉,机器学习开源项目使用|机器学习', '捋一捋Python中的List(下)', 'Pygame实战:风靡全球的经典泡泡龙小游戏来袭,你会喜欢嘛?(附源码)', 'pythonscrapy代理中间件,爬虫必掌握的内容之一', '海王必备,我用python写了一个微信机器人和她聊天之后把我拉黑了', 'PyCharm插件和配置', 'python中字典和列表的相互嵌套问题', '《JavaScript百炼成仙》统一回复粉丝们的一些问题', '2021年TI杯全国大学生电子设计大赛智能送药小车(F题)【本科组】(jetsonnano+yolov4-tiny+STM32F4识别数字)(已推国赛)', '【Python从入门到实战】一篇文章带你搞懂Python中的类~', '【机器学习】回归算法-精讲']

这里我只写了一个爬取文章标题的正则表达式,后面我觉得比较麻烦就没有继续下去了。想着有没有其他方法可以爬取排行榜,后来用了第二种方法——etree和xpath


新人创作不易,觉得不错的看官,点个赞吧,么么哒!!!

转载注明出处!

                                                   【浅谈python爬虫1】基于正则表达式的基础爬虫——爬取排行榜榜单内容