我要同时爬取新闻标题和其他数据
时间: 2023-09-16 19:09:04 浏览: 108
好的,你可以在 `get_page_titles` 函数中扩展代码,从页面中提取出其他需要的数据,并将其保存到一个字典中,最后将多个字典组成的列表作为返回值。这样,在遍历所有页面时,你就可以将每个页面的新闻标题和其他数据一起保存到一个大的列表中,最后使用 `numpy.savetxt` 函数将其保存为 txt 文件。
下面是一个示例代码,假设你要同时爬取新闻标题、发布时间和阅读量:
```python
import re
import requests
from lxml import etree
import numpy as np
# 设置请求头信息
headers = {'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.162 Safari/537.36' }
# 定义获取页面新闻信息的函数
def get_page_info(url):
response = requests.get(url,headers = headers)
response.encoding = 'utf8'
html = response.text
root = etree.HTML(html)
# 获取新闻标题
titles = root.xpath("//div[@class='main_lt']/ul/li/div[@class='wzbt']/a/text()")
# 获取发布时间和阅读量
times = root.xpath("//div[@class='main_lt']/ul/li/div[@class='wzbt']/span[2]/text()")
reads = root.xpath("//div[@class='main_lt']/ul/li/div[@class='wzbt']/span[3]/text()")
# 处理时间和阅读量的格式
times = [re.sub('[\[\]]', '', t) for t in times]
reads = [re.sub('[\[\]]', '', r) for r in reads]
# 将标题、时间、阅读量组成一个字典
info_list = []
for i in range(len(titles)):
info = {}
info['title'] = titles[i]
info['time'] = times[i]
info['read'] = reads[i]
info_list.append(info)
return info_list
# 定义一个空列表,用于保存所有页面的新闻信息
all_info = []
# 对所有页面进行遍历,将每一页的新闻信息添加到空列表中
for i in range(1, 11):
url = "http://finance.caijing.com.cn/insurance/index_{}.shtml".format(i)
info_list = get_page_info(url)
all_info += info_list
# 使用 numpy 库的 savetxt 函数将所有新闻信息保存为 txt 文件
np.savetxt('./caijing_info.txt', all_info, fmt='%s')
```
在这个示例代码中,我们定义了一个新的函数 `get_page_info`,用于获取页面中的新闻标题、发布时间和阅读量。在这个函数中,我们首先使用 XPath 语法提取出这三个数据,然后对时间和阅读量的格式进行了一些处理,最后将它们组成一个字典,保存到一个列表中。在遍历所有页面时,我们将每个页面的新闻信息保存到一个大的列表 `all_info` 中,最后使用 `numpy.savetxt` 函数将其保存为 txt 文件。
阅读全文