python爬虫实战(1)--爬取新闻数据

想要每天看到新闻数据又不想占用太多时间去整理,萌生自己抓取新闻网站的想法。

1. 准备工作

使用python语言可以快速实现,调用BeautifulSoup包里面的方法

安装BeautifulSoup

复制代码
pip install BeautifulSoup

完成以后引入项目

2. 开发

定义请求头,方便把请求包装成正常的用户请求,防止被拒绝

复制代码
headers = {
    "User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/85.0.4183.83 Safari/537.36"
}

定义被抓取的url,并请求加上请求头

复制代码
    response = requests.get(url=url, headers=headers)

BeautifulSoup解析

复制代码
    soup = BeautifulSoup(response.text, "html.parser")

分析网站需要提取数据的标签!在这里插入图片描述(https://img-blog.csdnimg.cn/b687fdc39a0d4f1999a5492b70fda4a5.png![在这里插入图片描述](https://file.jishuzhan.net/article/1689653626621923329/6ac7c0e8b79343e0a39bcdeb7a7d0b42.png)

因为获取的对象是li标签的第一个,即

复制代码
        divs = soup.find(class_="js-item item")

这样默认就是第一个,如果需要获取全部,则需要find_all,遍历集合

防止获取到的新闻是当天的做一个日期判断

复制代码
        a = first_div.find(class_="title")
        if a.getText().__contains__(datetime.date.today().strftime("%#m月%#d日")):

日期存在title里面所以为了判断单独取一下信息

然后要取到最新日期的新闻自己的url,并get请求这个url

复制代码
            b = a.get('href')
            response = requests.get(url=b, headers=headers)
            soup = BeautifulSoup(response.text, "html.parser")

打开新的网址后分析网站标签信息

取这个标签,获取到p标签的值

复制代码
            body = soup.find(class_="post_body")
            p = body.find_all('p')

获取到的是个数组,去掉第一个元素,从第二个开始即是我们需要的结果

复制代码
            p_id_tag = p[1].__str__()

输出的信息带有元素标记,使用正则处理一下

复制代码
            raw_text = re.findall(r'<p[^>]*>(.*?)</p>', p_id_tag).__str__()
            # 去掉 HTML 标签并换行显示
            clean_text = raw_text.replace('<br/>', '\n').replace('<p>', '').replace('</p>', '').replace("']",
                                                                                                        "").replace(
                "['", "").replace(r"\u200b", "")

然后把抓取的信息写入txt

复制代码
            file = open("C:\\Users\\Administrator\\Desktop\\每日新闻" + '.txt',
                        'w', encoding='utf-8')
            file.write(clean_text)
            file.close()

最后使用定时任务每天定时抓取,这样就可以每天更新了

复制代码
    schedule.every().day.at("08:00").do(getNews)
    while True:
        schedule.run_pending()
        time.sleep(1)

运行效果

相关推荐
熊猫钓鱼>_>25 分钟前
普通用户视角的端侧智能体验手记【鸿蒙心迹】
开发语言·人工智能·华为·智能手机·性能优化·ai编程·harmonyos
瑞雪兆丰年兮26 分钟前
JavaWeb-day13-SpringBootWeb事务管理&AOP
java·开发语言·springboot·javaweb·事务·web·aop
用户019027581612 小时前
Dify / Coze 低代码 Agent 怎么接 A 股行情?
python
布莱克6052 小时前
Swift 常量详解:从 let 到编译期优化
服务器·开发语言·ssh·swift·常量·let
Dumbness2 小时前
不传 day 参数,座位图显示全空:用 Python 标准库手写 Web 框架,请求到业务代码前的 5 个细节
后端·python
布莱克6052 小时前
Swift 可选类型(Optionals)详解:从原理到实战
开发语言·安全·ssh·swift·optional·可选类型
databook3 小时前
收上来一堆 Excel,怎么保证没改错
python·数据分析
2601_967987374 小时前
Python 教程:默认字典(defaultdict)全维度深度指南
python·性能优化·数据处理·collections·defaultdict
鱼听禅4 小时前
Ubuntu安装YOLOv8进行菌落识别训练
linux·python·yolo·ubuntu
ZhengEnCi4 小时前
Agent 查不出代码 Bug 怎么办:一份带时间戳的调试日志与读日志排查流程
python·ai编程