【浅谈python爬虫1】基于正则表达式的基础爬虫——爬取排行榜榜单内容
大家好,我是好学的小师弟。今天来和大家分享下,我近期工作的一个学习心得——爬虫。虽然之前也有过爬虫的学习,但是那基本上都是基于图片的爬取。这次学习心得,算是一个小小的提升吧。
主要分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文件读取', '【渗透测试自学系列】——邮件协议是如何被安全人员利用的?', '每日一算法(22)', '如何将照片或者视频中的背景图抠掉,机器学习开源项目使用|机器学习', '捋一捋Python中的List(下)', 'Pygame实战:风靡全球的经典泡泡龙小游戏来袭,你会喜欢嘛?(附源码)', 'pythonscrapy代理中间件,爬虫必掌握的内容之一', '海王必备,我用python写了一个微信机器人和她聊天之后把我拉黑了', 'PyCharm插件和配置', 'python中字典和列表的相互嵌套问题', '《JavaScript百炼成仙》统一回复粉丝们的一些问题', '2021年TI杯全国大学生电子设计大赛智能送药小车(F题)【本科组】(jetsonnano+yolov4-tiny+STM32F4识别数字)(已推国赛)', '【Python从入门到实战】一篇文章带你搞懂Python中的类~', '【机器学习】回归算法-精讲']
这里我只写了一个爬取文章标题的正则表达式,后面我觉得比较麻烦就没有继续下去了。想着有没有其他方法可以爬取排行榜,后来用了第二种方法——etree和xpath
新人创作不易,觉得不错的看官,点个赞吧,么么哒!!!
转载注明出处!
上一篇: python爬取起点中文网,原创榜单
下一篇: 爬取百度口碑企业标签分类