python爬虫 | 爬取新浪新闻

基础信息获取:

网站url:https://news.sina.com.cn/china/

然后我们需要爬取前五页的新闻,包括标题,时间和正文,使用json格式保存

代码实现:

import requests
from bs4 import BeautifulSoup
import json

all_news_data = []
a = 1
for a in range(1,6):

    main_url = "https://feed.sina.com.cn/api/roll/get"
    params = {'pageid': {'121'},
    'lid': {'1356'},
    'num': {20},
    'page': a}
    headers = {'user-agent':
    'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/133.0.0.0 Safari/537.36 Edg/133.0.0.0'}

    resp = requests.get(url=main_url,params=params,headers=headers)
    json_data = resp.json()
    news_data = json_data['result']['data']

    # print(news_data)
    for data in news_data:
        # print(data)
        # name = data['title']   #标题
        url = data['url']   #url
        # print(name,url)

        news_resp = requests.get(url=url,headers=headers)
        news_resp.encoding = 'utf-8'
        page = BeautifulSoup(news_resp.text, features="html.parser")
        news_title = page.select('h1.main-title')[0].text.strip()
        news_body = page.find("div",attrs={"class":"article"}).text.strip()
        news_body = news_body.replace('\n', '')  # 替换换行符
        news_date = page.find("span",attrs={"class":"date"}).text.strip()
        # print(news_title,news_body,news_date)

        # 将新闻信息存储为字典
        news_info = {
            "title": news_title,
            "body": news_body,
            "date": news_date
        }

        # 添加到所有书籍数据列表中
        all_news_data.append(news_info)

with open("homework_2.json",'w',encoding="utf-8") as f:
     json.dump(all_news_data,f,ensure_ascii=False, indent=4)

print("over!")

### 编写Python爬虫抓取新浪网足球信息 为了使用Python编写一个能够有效抓取新浪网足球相关信息的爬虫程序,可以采用`requests`库获取网页内容,并利用`BeautifulSoup`解析HTML文档。对于更复杂的交互式页面,则可能需要用到`selenium`模拟浏览器行为。 #### 准备工作 安装必要的第三方库可以通过pip命令完成: ```bash pip install requests beautifulsoup4 selenium ``` #### 获取目标URL的内容 通过发送HTTP请求至指定的目标网址,获得响应对象后读取出其文本形式的内容[^2]。 ```python import requests url = 'https://sports.sina.com.cn/football/' headers = { "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64)" } response = requests.get(url, headers=headers) if response.status_code == 200: html_content = response.text else: print(f"Failed to retrieve data: {response.status_code}") ``` #### 解析HTML文档提取所需数据 创建`BeautifulSoup`实例传入刚才得到的html字符串以及所使用的解析器;接着定位到包含新闻条目的标签节点遍历它们从而抽取每篇文章的关键属性如标题链接摘要等[^3]。 ```python from bs4 import BeautifulSoup soup = BeautifulSoup(html_content, 'lxml') news_items = soup.find_all('div', class_='list-item') for item in news_items[:5]: # 只显示前五项作为例子 title = item.h2.a.string.strip() link = item.h2.a['href'] summary = ''.join([p.text for p in item.select('.intro')]).strip() print({ 'title': title, 'link': link, 'summary': summary }) ``` #### 处理分页加载更多文章 如果遇到需要点击“下一页”的情况,通常有两种方式处理:一种是在源码里查找是否存在规律性的参数变化(比如page=?),另一种则是借助selenium自动化工具模仿真实用户的操作过程来触发AJAX异步更新事件进而拿到新一批次的文章列表[^4]。 #### 遵守网站robots协议与道德准则 在实际开发过程中应当遵循各站点发布的Robots.txt文件指示尊重对方服务器资源合理控制访问频率避免给原站带来过重负担同时也注意保护个人隐私信息安全合法合规地开展网络爬虫活动。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值