下面是Python网络爬虫之爬取微博热搜的完整攻略:
一、爬取微博热搜的过程
- 确定爬取目标
要爬取微博热搜,需要先进入微博热搜页面,通过 Firefox 或者 Chrome 等浏览器的开发者工具查看网页结构,找到热搜关键字所在的 html 元素和相应的 xpath 或 css selector。
- 分析网页结构
在开发者工具中使用抓取工具获取热搜页面的内容,观察 html 结构和 css 样式,推断出需要爬取的信息所在的元素和属性。
- 使用 Python 抓取网页内容
使用 urllib,requests 等 Python 库向网络发送 HTTP 请求,获取目标页面的 HTML 文档。
- 使用正则表达式或解析库进行信息提取和数据处理
从获取的 HTML 文档中使用正则表达式或者解析库(比如 BeautifulSoup、lxml 等)提取出热搜关键字、讨论数量等重要信息,进行数据处理和存储。
二、示例说明
下面给出两个示例,分别基于 urllib 和 requests 两个库实现热搜信息的爬取。为了让程序更加稳定,这里我们使用 requests 来实现热搜信息的爬取。
import requests
from bs4 import BeautifulSoup
url = 'https://s.weibo.com/top/summary?cate=realtimehot'
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')
hot_list = soup.select('#pl_top_realtimehot table tbody tr')
result_list = []
for hot in hot_list:
title = hot.select_one('.td-02 a').text
hotness = hot.select_one('.td-01 span').text
result_list.append((title, hotness))
print(result_list)
上述代码先使用 requests 和 bs4 库对网页进行请求和解析。请求页面时需要添加 HTTP 请求头,模拟浏览器请求,避免请求被拦截。然后使用 BeautifulSoup 从 HTML 中选择所需元素,并使用 str.select() 方法获取到所有的热搜内容。结果以列表的形式返回。
第二个示例同样使用 requests 和 bs4 库对微博热搜页面进行信息提取,代码如下:
import requests
from bs4 import BeautifulSoup
url = 'https://s.weibo.com/top/summary?cate=realtimehot'
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'
}
res = requests.get(url, headers=headers)
soup = BeautifulSoup(res.content, 'html.parser')
data = soup.find("div", {"class": "data"})
lis = data.findAll("li")
rank = 1
for li in lis:
trend_rank = li.find("div", {"class": "rank-top"})
rank_txt = li.find("div", {"class": "rank-txt"})
title = rank_txt.find("a", {"target": "_blank"}).get("title")
hot_degree = rank_txt.find("span", {"class": "hot"}).getText()
print(rank, ". 标题:", title, " 热度:", hot_degree)
rank += 1
上述代码中,使用 requests 库获取微博热搜数据的 HTML 页面,并在浏览器开发者工具中观察数据所在的 html 元素和属性等细节信息。使用 BeautifulSoup 库选择所需元素,并使用 find() 或 findAll() 方法获取热搜数据。最后,输出爬虫数据,程序完成。
除了上面两个库之外,还可以使用 Selenium、Scrapy 等工具来实现爬虫程序的开发。使用 Selenium 开发爬虫需要打开浏览器进行操作,模拟真实用户(需要下载对应的 driver),而 Scrapy 则是一个爬取框架,能够方便地实现爬虫程序的开发、调试和运行。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Python网络爬虫之爬取微博热搜 - Python技术站