爬取多家公司的新浪财经新闻,并设置好异常情况处理。

这段代码实现了从新浪财经网站爬取指定公司的新闻,包括字节跳动、阿里巴巴、腾讯和贵州茅台。它通过设置User-Agent避免被识别为机器人,并处理了异常情况,将新闻标题、链接和图片保存到本地。代码使用了requests和re库进行网络请求和正则表达式匹配。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1 需求

爬取多家公司的新浪财经新闻,并设置好异常情况处理。

2 代码实现

import requests
import re


def news(company, page):
    # 获取网页源代码
    url = 'https://search.sina.com.cn/news?q=' + company + '&c=news&sort=time&page' + str(page)
    headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:91.0) Gecko/20100101 Firefox/91.0'}
    source = requests.get(url=url, headers=headers).text
    # 获取新闻标题
    p_title = '<h2>.*?" target="_blank">(.*?)</a>'
    title = re.findall(p_title, source)
    # 获取网页网址
    p_href = '<h2>.*?<a href="(.*?)" target="_blank">'
    href = re.findall(p_href, source)
    p_img = '" src="(.*?)" />'
    img = re.findall(p_img, source)
    for index in range(len(title)):
        title[index] = re.sub('<.*?>', '', title[index]).strip()
        file = open('images/' + title[index] + '.jpg', 'wb')
        pic = requests.get(img[index])
        file.write(pic.content)
        file.close()
        print(str(index + 1) + "." + title[index] + "(" + href[index] + ")")
        print()


if __name__ == "__main__":
    companies = ['字节跳动', '阿里巴巴', '腾讯', '贵州茅台']
    for index in range(10):
        for company in companies:
            try:
                news(company, index + 1)
                print(company + "新浪财经爬取成功!")
            except:
                print(company + "新浪财经爬取失败!")
<think>好的,我现在需要帮用户解决如何使用Python爬取新浪财经数据的问题。首先,我得回忆一下之前学过的爬虫知识,以及用户提供的引用内容。用户给了两个参考引用,其中提到爬取行业信息和股票数据的具体例子,比如使用symbol=sh600900这样的代码来获取分价表数据。 首先,我需要确定用户的需求是什么。他们可能想要获取股票的历史数据、实行情、财务信息或者行业数据。根据引用中的例子,用户可能对股票的分价表、行业分析感兴趣。接下来,我应该考虑新浪财经的数据结构,比如网页是静态还是动态加载的。如果是动态加载,可能需要用Selenium或者分析API接口;如果是静态的,可以用requests和BeautifulSoup。 然后,用户提供的引用[1]提到爬取行业信息分析热门行业,引用[2]则是获取特定股票的分价表数据。这说明新浪财经可能有不同的数据接口或URL结构。我需要查找新浪财经的股票数据页面,分析其URL规律。比如,股票代码可能是拼接在URL中,如sh600900对应上证所的股票,sz开头的是深证。 接下来,考虑反爬机制。新浪财经可能有反爬措施,比如验证User-Agent,限制IP访问频率等。因此,在代码中需要设置请求头,模拟浏览器访问,添加延避免被封IP。此外,可能需要处理Cookie或者使用代理,但根据用户提供的例子,可能暂不需要这么复杂。 然后,编写代码步骤。首先导入必要的库,比如requests、BeautifulSoup、pandas。然后构造目标URL,比如引用[2]中的分价表数据,可能需要找到对应的API接口。或者,如果是网页数据,解析HTML表格。例如,行业信息的页面可能有一个表格,用BeautifulSoup提取数据。 处理数据方面,可能需要将爬取的数据保存为DataFrame,再导出到CSV或Excel。对于分价表,可能需要解析JSON数据,如果新浪财经提供了API返回JSON格式的数据,那会更方便。否则,可能需要从HTML中提取数据,处理字符串和标签。 测试代码,需要确保能够正确获取数据,处理可能出现的异常,比如网络错误、页面结构变化等。此外,遵守网站的robots.txt,尊重版权和法律问题,避免爬取敏感或禁止的数据。 最后,生成相关问题,帮助用户深入理解,比如如何处理反爬、数据存储方式、定爬取等。确保回答结构清晰,分步骤说明,提供示例代码,让用户能够跟着操作。</think>### 如何使用Python爬取新浪财经数据? #### 一、准备工作 1. **安装依赖库** 使用以下命令安装必要的Python库: ```bash pip install requests pandas beautifulsoup4 ``` 2. **分析目标页面结构** 新浪财经的数据通常通过网页或API提供。例如: - 行业数据页面:`http://vip.stock.finance.sina.com.cn/q/go.php/vReport_List/kind/industry/index.phtml`[^1] - 股票分价表API:`http://market.finance.sina.com.cn/pricehis.php?symbol=sh600900&startdate=2011-08-17&enddate=2011-08-19`[^2] --- #### 二、爬取静态网页数据(以行业信息为例) ```python import requests from bs4 import BeautifulSoup import pandas as pd url = "http://vip.stock.finance.sina.com.cn/q/go.php/vReport_List/kind/industry/index.phtml" headers = {"User-Agent": "Mozilla/5.0"} # 模拟浏览器请求头 response = requests.get(url, headers=headers) soup = BeautifulSoup(response.text, "html.parser") table = soup.find("table", class_="list_table") # 定位数据表格 # 提取表格数据到DataFrame data = [] for row in table.find_all("tr")[1:]: # 跳过表头 columns = row.find_all("td") industry = columns[0].text.strip() report_count = columns[2].text.strip() data.append([industry, report_count]) df = pd.DataFrame(data, columns=["行业名称", "研报数量"]) df.to_csv("industry_report.csv", index=False) ``` --- #### 三、调用API接口(以股票分价表为例) 新浪财经的部分数据通过API返回JSON格式,例如分价表数据: ```python import requests import pandas as pd symbol = "sh600900" # 股票代码(sh表示上证,sz表示深证) start_date = "2011-08-17" end_date = "2011-08-19" url = f"http://market.finance.sina.com.cn/pricehis.php?symbol={symbol}&startdate={start_date}&enddate={end_date}" response = requests.get(url) data = response.json() # 直接解析JSON数据 # 转换为DataFrame保存 df = pd.DataFrame(data["data"]) df.to_excel("stock_price_distribution.xlsx", index=False) ``` --- #### 四、注意事项 1. **反爬机制** - 添加`headers`模拟浏览器访问。 - 控制请求频率(如添加`time.sleep(1)`)。 2. **数据合法性** 需遵守新浪财经的`robots.txt`规则,避免高频请求。 3. **动态页面处理** 若数据通过JavaScript动态加载,需使用`Selenium`或分析隐藏的API。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值