输入关键字 抓取所有网页(Python爬取基金数据案例到的模块案例网址(组图) )
优采云 发布时间: 2022-02-19 07:19输入关键字 抓取所有网页(Python爬取基金数据案例到的模块案例网址(组图)
)
使用搜索关键词爬取今日头条新闻评论信息案例爬虫4步:1.分析网页2.向网页发送请求,得到响应3.提取分析数据< @4.保存数据
本例中使用的模块
import requests
import time
import csv
案例网址:
一、分析网页
如果我们想通过关键字搜索和爬取新闻评论,我们需要找到他们的界面,但是如何找到这个界面其实并不难。我们在首页的搜索栏中输入关键字进行搜索。单词,点击搜索:
然后 URL 将跳转到搜索关键字的新闻页面:
找到这个页面,我们可以按F12进入开发者模式。经过分析,由于是动态加载的页面,我们很容易找到收录新闻数据的URL接口:
使用 URL 接口,需要分析这个 URL 的信息。可以看出这个URL很长,需要加载的参数很多。这个参数也就是我们常说的params参数:
图中标识的三个参数信息是我们必须使用的信息,offset是页码信息,我们可以用它来爬取数据进行翻页,keyword是关键字信息,这个一般理解,timestamp是一个时间戳,但是这个时间戳发生了一些变化。我在上一篇博文中也提到过,这里不再赘述。有兴趣的可以看我之前的博文:Python爬取基金数据案例
现在我们来看看这个接口URL中的信息是什么样的,如图:
可以看出,这个接口中的信息是json数据格式的信息。所有新闻数据信息都在数据列表中。每个列表收录一条新闻数据信息。我们需要提取每条信息数据的链接地址。以及该消息所属的ID信息。这个ID信息非常有用,提取评论信息时需要用到:
上图是收录评论信息的params参数。可以看到这个参数里面有两个关键参数,group_id和item_id。这个group_id对应上面接口信息中的group_id。item_id 与 group_id 相同。即使分析完成,我们也开始。现在让我们谈谈总体思路。通过搜索,我们得到所有收录新闻数据的界面URL,然后向该URL发送请求提取需要的数据,然后将需要的数据构建到收录每个信息数据的评论的界面中,向此发送请求再次界面,最后提取每条新闻数据的信息并保存。
二、构造params参数,发送请求,获取响应数据
代码显示如下:
def paramsData(self):
"""
构建params的方法
:return:
"""
params = {
"aid": "24",
"app_name": "web_search",
"offset": str(self.page),
"format": "json",
"keyword": self.search_name,
"autoload": "true",
"count": "20",
"en_qc": "1",
"cur_tab": "1",
"from": "search_tab",
"pd": "synthesis",
"timestamp": self.TIMESTRF,
}
return params
def parse_url(self, url, params):
"""
发送请求,获取响应的方法
:param url: self.API_URL
:param params:
:return:
"""
response = requests.get(url=url, headers=self.headers, params=params)
if response.status_code == 200:
return response
三、提取需要的数据
# 提取需要的信息的方法
def get_news_data(self, json_str):
"""
# 提取需要的信息的方法
:param json_str:
:return:
"""
news_dict = {
}
# 提取新闻的url
news_dict['news_url'] = json_str.get('article_url')
# 提取新闻的标题
news_dict['news_title'] = json_str.get('title')
# 提取新闻的ID
news_dict['group_id'] = json_str.get('group_id')
return news_dict
四、再次构建params参数,再次请求提取的URL
def paramsData2(self, news_dict):
"""
再次构建params的方法
:param news_dict:
:return:
"""
params2 = {
"aid": "24",
"app_name": "toutiao_web",
"offset": "0",
"count": "10",
"group_id": news_dict.get('group_id'),
"item_id": news_dict.get('group_id'),
}
return params2