requests模块爬取微博热搜榜

爬取微博热搜榜

作为爬虫新手,这是一个练手项目,水平有限,仅供参考,欢迎交流
此代码基于requests包和lxml包编写,同时可以查看爬取热搜时间。
因为水平有限,暂时还未想到置顶热搜写入txt办法。
import requests
from lxml import etree
import datetime

if __name__=='__main__':
    headers = {
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) \
                              Chrome/84.0.4147.125 Safari/537.36 Edg/84.0.522.59'
    }
    url='https://s.weibo.com/top/summary?Refer=top_hot&topnav=1&wvr=6'
    page_text=requests.get(url=url,headers=headers).text
    tree=etree.HTML(page_text)
    list=tree.xpath('//div[@class="data"]//tbody/tr')

    fp = open('微博热搜.txt', 'w')
    now_time = datetime.datetime.now().strftime('%F %A %H:%M:%S') + '\n' # 获取当前时间
    fp.write(now_time)      # 在开头写入热搜时间

    # 微博热搜页面的源代码还包括一个置顶热搜,它的标签包含结构和其他的50个不同,因此需要单独考虑(空列表)
    '''
        一个繁琐的解法,无法输出微博置顶热搜
        先获取list长度len(list),在此基础上-1后获取range(len(list)-1),从而不会超越索引
        list[i]获取xpath数据,list从0开始,list[i+1]从list[1]开始,跳过了置顶热搜
        
        for i in range(len(list)-1):
        rank=list[i+1].xpath('./td[@class="td-01 ranktop"]/text()')[0]
        data=list[i+1].xpath('./td[@class="td-02"]/a/text()')[0]
        hot=list[i+1].xpath('./td[@class="td-02"]/span/text()')[0]
        等效于
        for li in list:
            rank=list.xpath('./td[@class="td-01 ranktop"]/text()')[0]
            data=list.xpath('./td[@class="td-02"]/a/text()')[0]
            hot=list.xpath('./td[@class="td-02"]/span/text()')[0]
        但跳过了置顶热搜
        循环写入需要在循环外打开文件,否则重复覆盖
    '''
    for i in range(len(list)-1):
        rank=list[i+1].xpath('./td[@class="td-01 ranktop"]/text()')[0]
        data=list[i+1].xpath('./td[@class="td-02"]/a/text()')[0]
        hot=list[i+1].xpath('./td[@class="td-02"]/span/text()')[0]
        hot_search=rank + '.' + data + '\t'+ hot + '\n'
        print(hot_search)
        fp.write(hot_search)
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 我可以提供一些有关用Python爬取微博的建议:1.使用Python爬虫库来爬取微博;2.使用requests库来获取微博的数据;3.使用BeautifulSoup库来解析爬取到的微博数据。 ### 回答2: 要用Python爬取微博,可以使用第三方库beautifulsoup和requests。首先,需要安装这两个库,并导入它们。 ``` pip install beautifulsoup4 pip install requests ``` 然后,导入需要的模块: ```python import requests from bs4 import BeautifulSoup ``` 接下来,使用requests库发送HTTP请求,获取微博的网页内容: ```python url = "https://s.weibo.com/top/summary?cate=realtimehot" response = requests.get(url) ``` 通过调用response对象的text属性,可以获取网页内容的字符串形式。然后,使用beautifulsoup库进行解析,以便从页面中提取出搜榜的内容。 ```python soup = BeautifulSoup(response.text, "html.parser") ``` 可以使用beautifulsoup的find()或find_all()方法根据标签名或CSS选择器来查找所需的元素。例如,可以通过以下代码获取搜榜的所有内容: ```python hot_topics = soup.find_all("td", class_="td-02") ``` 接下来,可以通过循环遍历hot_topics列表,提取出每个的文本内容,并将其打印出来: ```python for topic in hot_topics: print(topic.get_text()) ``` 这样就可以通过Python爬取微博搜榜的内容了。需要注意的是,由于网站可能存在反爬机制,可能需要使用一些爬虫策略(如设置User-Agent、使用代理等)来避免被屏蔽。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值