5 行 python 爬虫代码,就能采集每日资讯@-yb体育官方

梦想橡皮擦 发表于 2022/08/31 15:14:34 2022/08/31
【摘要】 ⛳️ 实战场景他,78 技术人社群的一个新人他,每天都给大家分享今日新闻他,正在学习 python他,昨天忽然觉得 python 爬虫可以替代他手动操作。擦哥说,一个初级爬虫工程师,即将诞生了,没准还是一个实战型程序员,用编程解决自己重复性的动作。具备每日资讯的站点非常多,这次咱们选择:365 资讯简报,一个内容号,在 ==163== 的地址如下所示:https://www.python地...

⛳️ 实战场景

他,78 技术人社群的一个新人
他,每天都给大家分享今日新闻
他,正在学习 python
他,昨天忽然觉得 python 爬虫可以替代他手动操作。

擦哥说,一个初级爬虫工程师,即将诞生了,没准还是一个实战型程序员,用编程解决自己重复性的动作。

具备每日资讯的站点非常多,这次咱们选择:365 资讯简报,一个内容号,在 ==163== 的地址如下所示:

https://www.python地址加密.com/dy/media/t1603594732083.html

该账号每天做的事情就是【每天发一下新闻汇总】,然后前文的【他】把新闻搬到 78 技术人中来。

⛳️ 编码时间

上文提及的页面简单的分析之后,发现没有任何反爬技术,直接写代码,直接拿数据即可。

编码直接采用 requestslxml 库即可,代码直接面向过程编程。

由于是写给新手的教程,所以模块的安装必须提及一下:

pip install requests,lxml -i https://pypi.tuna.tsinghua.edu.cn/simple

然后梳理一下逻辑:

  • 第一步:采集列表页,然后循环进入详情页;
  • 第二步:采集详情页数据。

需求清晰,代码编写就变得简单了,直接走起,代码关键点都在注释中进行说明。

# 导入模块
import requests
from lxml import etree
# 设置请求地址,直接上常量
# 新闻列表页面地址
url = "https://www.python地址加密.com/dy/media/t1603594732083.html"
# 设置请求头
headers = {
    'user-agent': 'mozilla/5.0 (windows nt 10.0; wow64) applewebkit/537.36 (khtml, like gecko) chrome/98.0.4758.102 safari/537.36'
}
# 获取新闻列表页
resp = requests.get(url, headers=headers).text
html = etree.html(resp)
# 获取第一条新闻
today_url = html.xpath("//ul[@class='list_box cur']/li/a/@href")[0]
# 获取详情页数据
resp_1 = requests.get(today_url, headers=headers).text
html_1 = etree.html(resp_1)
# 获取新闻详情
news_list = html_1.xpath('//div[@class="post_body"]/p[2]//text()')[1:]
print(news_list)

由于我们的目标是获取当日新闻,即获取列表页最新的一条数据,所以无需通过循环获取,直接定位到首条数据即可。

再次阅读代码,其实可以发现其中仅包含两个重要函数,其一是 requests.get(),该对象方法用户获取目标站点网页响应数据。
其二是 html_1.xpath(),该方法用于提取响应源码中的目标数据,即新闻聚合数据,学习的时候,重点关注这两个函数即可。

此时留给大家一个扩展需求,你可以将上述代码优化到几行呢?尝试一下,是否可以用5行以内代码完成相同的需求呢,这样就能满足我们的标题啦~

📢📢📢📢📢📢
💗 你正在阅读 【梦想橡皮擦】 的博客
👍 阅读完毕,可以点点小手赞一下
🌻 发现错误,直接评论区中指正吧
📆 橡皮擦的第 714 篇原创博客

【亚博平台下载的版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区),文章链接,文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件至:进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容。
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。