python爬虫微博关键字_微博关键词爬虫——基于requests和aiohttp

requests库是python爬虫中最常见的库,与内置的urllib库相比,它更加简洁高效,是每一个接触爬虫者都务必要掌握的基础;但它也是有缺点的,就是不支持异步操作,虽然可以通过多线程来解决,但当需要发送大量请求时,创建大量的线程会浪费过多的资源;此时出现了一个新的库aiohttp,它是支持异步操作的,可以在一个线程中,通过异步多任务来实现快速发送请求,提高效率。这次,我基于这两个库,做一个高效的微博关键词爬虫,源码在文章的末尾。

首先,我是从微博的移动端地址入手,发现它是ajsx请求,请求参数中,除页码外,其他都是常量,所以要实现多页请求,直接将页码当作参数发送即可。但是页面返回的json数据并没有直接标明总页数,所以需要自己计算。进一步分析,发现数据中包含了微博的总条数和每一页的条数,这就是突破口,对它进行简单的运算就可以拿到总页码。此处只需要发送一次请求,就可以获取到信息,所以这里采用的是requests。

defget_page():"""先用requests构造请求,解析出关键词搜索出来的微博总页数

:return: 返回每次请求需要的data参数"""data_list=[]

data={'containerid': '100103type=1&q={}'.format(kw),'page_type': 'searchall'}

resp= requests.get(url=url, headers=headers, params=data)

total_page= resp.json()['data']['cardlistInfo']['total'] #微博总数

#一页有10条微博,用总数对10整除,余数为0则页码为总数/10,余数不为0则页码为(总数/10)+1

if total_page % 10 ==0:

page_num= int(total_page / 10)else:

page_num= int(total_page / 10) + 1

#页码为1,data为当前data,页码不为1,通过for循环构建每一页的data参数

if page_num == 1:

data_list.append(data)returndata_listelse:for i in range(1, page_num + 1):

data['page'] =i

data_list.append(copy.deepcopy(data))

  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,我可以帮你解决这个问题。你可以使用 Python 的第三方库 `requests` 和 `beautifulsoup4` 来爬取微博某个话题的内容数据。 首先,你需要了解微博的 URL 格式。以微博话题“Python爬虫”为例,其 URL 为:https://s.weibo.com/weibo?q=%23Python%E7%88%AC%E8%99%AB%23&Refer=top。其中,“%23”是“#”的 URL 编码,“q=”后面跟的是话题的关键词。 接下来,你可以使用 `requests` 库向该 URL 发送 GET 请求,并将响应结果的 HTML 代码解析为 `beautifulsoup4` 对象。例如: ```python import requests from bs4 import BeautifulSoup url = 'https://s.weibo.com/weibo?q=%23Python%E7%88%AC%E8%99%AB%23&Refer=top' headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3'} response = requests.get(url, headers=headers) soup = BeautifulSoup(response.text, 'html.parser') ``` 然后,你可以使用 `beautifulsoup4` 的查找方法来提取微博内容数据。例如,你可以使用 `find_all` 方法找到所有的微博 div 元素,再从中提取微博的文本内容和发布时间。具体代码如下: ```python weibo_list = soup.find_all('div', class_='content') # 找到所有微博 div 元素 for weibo in weibo_list: text = weibo.find('p', class_='txt').get_text() # 提取微博文本内容 time = weibo.find('p', class_='from').find('a').get_text() # 提取微博发布时间 print(text, time) ``` 以上就是爬取微博话题“Python爬虫”内容数据的基本步骤。当然,实际应用中还需要注意反爬虫策略、数据清洗和存储等问题。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值