如何使用python爬取知乎热榜Top50数据

目录
  • 1、导入第三方库
  • 2、程序的主函数
  • 3、正则表达式匹配数据
  • 4、程序运行结果
  • 5、程序源代码

1、导入第三方库

import urllib.request,urllib.error  #请求网页
from bs4 import BeautifulSoup  # 解析数据
import sqlite3  # 导入数据库
import re # 正则表达式
import time # 获取当前时间

2、程序的主函数

def main():
    # 声明爬取网页
    baseurl = "https://www.zhihu.com/hot"
    # 爬取网页
    datalist = getData(baseurl)
    #保存数据
    dbname = time.strftime("%Y-%m-%d", time.localtime()) #
    dbpath = "zhihuTop50  " + dbname
    saveData(datalist,dbpath)

3、正则表达式匹配数据

#正则表达式
findlink = re.compile(r'<a class="css-hi1lih" href="(.*?)" rel="external nofollow"  rel="external nofollow" ') #问题链接
findid = re.compile(r'<div class="css-blkmyu">(.*?)</div>') #问题排名
findtitle = re.compile(r'<h1 class="css-3yucnr">(.*?)</h1>') #问题标题
findintroduce = re.compile(r'<div class="css-1o6sw4j">(.*?)</div>') #简要介绍
findscore = re.compile(r'<div class="css-1iqwfle">(.*?)</div>') #热门评分
findimg = re.compile(r'<img class="css-uw6cz9" src="(.*?)"/>') #文章配图

4、程序运行结果

5、程序源代码

import urllib.request,urllib.error
from bs4 import BeautifulSoup
import sqlite3
import re
import time

def main():
    # 声明爬取网页
    baseurl = "https://www.zhihu.com/hot"
    # 爬取网页
    datalist = getData(baseurl)
    #保存数据
    dbname = time.strftime("%Y-%m-%d", time.localtime())
    dbpath = "zhihuTop50  " + dbname
    saveData(datalist,dbpath)
    print()
#正则表达式
findlink = re.compile(r'<a class="css-hi1lih" href="(.*?)" rel="external nofollow"  rel="external nofollow" ') #问题链接
findid = re.compile(r'<div class="css-blkmyu">(.*?)</div>') #问题排名
findtitle = re.compile(r'<h1 class="css-3yucnr">(.*?)</h1>') #问题标题
findintroduce = re.compile(r'<div class="css-1o6sw4j">(.*?)</div>') #简要介绍
findscore = re.compile(r'<div class="css-1iqwfle">(.*?)</div>') #热门评分
findimg = re.compile(r'<img class="css-uw6cz9" src="(.*?)"/>') #文章配图

def getData(baseurl):
    datalist = []
    html = askURL(baseurl)
    # print(html)

    soup = BeautifulSoup(html,'html.parser')
    for item in soup.find_all('a',class_="css-hi1lih"):
        # print(item)
        data = []
        item = str(item)

        Id = re.findall(findid,item)
        if(len(Id) == 0):
            Id = re.findall(r'<div class="css-mm8qdi">(.*?)</div>',item)[0]
        else: Id = Id[0]
        data.append(Id)
        # print(Id)

        Link = re.findall(findlink,item)[0]
        data.append(Link)
        # print(Link)

        Title = re.findall(findtitle,item)[0]
        data.append(Title)
        # print(Title)

        Introduce = re.findall(findintroduce,item)
        if(len(Introduce) == 0):
            Introduce = " "
        else:Introduce = Introduce[0]
        data.append(Introduce)
        # print(Introduce)

        Score = re.findall(findscore,item)[0]
        data.append(Score)
        # print(Score)

        Img = re.findall(findimg,item)
        if (len(Img) == 0):
            Img = " "
        else: Img = Img[0]
        data.append(Img)
        # print(Img)
        datalist.append(data)
    return datalist
def askURL(baseurl):
    # 设置请求头
    head = {
        # "User-Agent": "Mozilla/5.0 (Windows NT 10.0;Win64;x64) AppleWebKit/537.36(KHTML, likeGecko) Chrome/80.0.3987.163Safari/537.36"
        "User-Agent": "Mozilla / 5.0(iPhone;CPUiPhoneOS13_2_3likeMacOSX) AppleWebKit / 605.1.15(KHTML, likeGecko) Version / 13.0.3Mobile / 15E148Safari / 604.1"
    }
    request = urllib.request.Request(baseurl, headers=head)
    html = ""
    try:
        response = urllib.request.urlopen(request)
        html = response.read().decode("utf-8")
        # print(html)
    except urllib.error.URLError as e:
        if hasattr(e, "code"):
            print(e.code)
        if hasattr(e, "reason"):
            print(e.reason)
    return html
    print()
def saveData(datalist,dbpath):
    init_db(dbpath)
    conn = sqlite3.connect(dbpath)
    cur = conn.cursor()

    for data in datalist:
        sql = '''
        insert into Top50(
        id,info_link,title,introduce,score,img)
        values("%s","%s","%s","%s","%s","%s")'''%(data[0],data[1],data[2],data[3],data[4],data[5])
        print(sql)
        cur.execute(sql)
        conn.commit()
    cur.close()
    conn.close()
def init_db(dbpath):
    sql = '''
    create table Top50
    (
    id integer primary key autoincrement,
    info_link text,
    title text,
    introduce text,
    score text,
    img text
    )
    '''
    conn = sqlite3.connect(dbpath)
    cursor = conn.cursor()
    cursor.execute(sql)
    conn.commit()
    conn.close()

if __name__ =="__main__":
    main()

到此这篇关于如何使用python爬取知乎热榜Top50数据的文章就介绍到这了,更多相关python 爬取知乎内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • python 抓取知乎指定回答下视频的方法

    前言 现在知乎允许上传视频,奈何不能下载视频,好气哦,无奈之下研究一下了,然后撸了代码,方便下载视频保存. 接下来以 猫为什么一点也不怕蛇? 回答为例,分享一下整个下载过程. 调试一下 打开 F12, 找到光标,如下图: 然后将光标移动到视频上.如下图: 咦这是什么?视野中出现了一条神秘的链接: https://www.zhihu.com/video/xxxxx,让我们将这条链接复制到浏览器上,然后打开: 似乎这就是我们要找的视频,不要着急,让我们看一看,网页的请求,然后你会发现一个很有意思的请

  • python 爬取知乎回答下的微信8.0状态视频

    微信 8.0 版本更新后,可以设置个人状态,状态里面可以添加火录制视频,很快状态视频就火了,可以看下知乎热榜有没有微信8.0状态沙雕又可爱的视频或图片?[1].比如我也设置了一个: 于是我就想把这些视频下载下来,也玩一玩.本文讲述如何使用 Python 一键下载知乎某个回答下的所有视频. 思路:分析知乎回答页面 -> 定位视频 -> 寻找视频播放的 url -> 下载.其实就两步:找到 url,然后下载. 寻找 url 一个回答下面可能有多个视频,先分析一个视频,打开谷歌浏览器的开发者工

  • Python爬取知乎图片代码实现解析

    首先,需要获取任意知乎的问题,只需要你输入问题的ID,就可以获取相关的页面信息,比如最重要的合计有多少人回答问题. 问题ID为如下标红数字 编写代码,下面的代码用来检测用户输入的是否是正确的ID,并且通过拼接URL去获取该问题下面合计有多少答案. import requests import re import pymongo import time DATABASE_IP = '127.0.0.1' DATABASE_PORT = 27017 DATABASE_NAME = 'sun' cli

  • python爬虫之利用selenium+opencv识别滑动验证并模拟登陆知乎功能

    滑动验证距离 分别获取验证码背景图和滑块图两张照片,然后利用opencv库,通过高斯模糊和Canny算法进行处理,然后通过matchTemplate方法进行两张图的匹配,获得滑动距离.需要注意的是,知乎验证码在进行操作的时候,需要在原有基础上再向右偏移10px距离 def get_distance(self, bg_img_path='./bg.png', slider_img_path='./slider.png'): """获取滑块移动距离""&quo

  • python使用selenium爬虫知乎的方法示例

    说起爬虫一般想到的情况是,使用 python 中都通过 requests 库获取网页内容,然后通过 beautifulSoup 进行筛选文档中的标签和内容.但是这样有个问题就是,容易被反扒机制所拦住. 反扒机制有很多种,例如知乎:刚开始只加载几个问题,当你往下滚动时才会继续往下面加载,而且在往下滚动一段距离时就会出来一个登陆的弹框. 这样的机制对于通过获取服务器返回内容的爬虫方式进行了限制,我们只能获得前几个回答,而没办法或许后面的回答. 所以需要使用 selenium 模拟真实浏览器进行操作.

  • 如何使用python爬取知乎热榜Top50数据

    目录 1.导入第三方库 2.程序的主函数 3.正则表达式匹配数据 4.程序运行结果 5.程序源代码 1.导入第三方库 import urllib.request,urllib.error #请求网页 from bs4 import BeautifulSoup # 解析数据 import sqlite3 # 导入数据库 import re # 正则表达式 import time # 获取当前时间 2.程序的主函数 def main(): # 声明爬取网页 baseurl = "https://ww

  • Python异步爬取知乎热榜实例分享

    目录 一.错误代码:摘要和详细的url获取不到 二.查看JS代码 一.错误代码:摘要和详细的url获取不到 import asyncio from bs4 import BeautifulSoup import aiohttp   headers={     'user-agent': 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.198 Safa

  • Python 详解通过Scrapy框架实现爬取CSDN全站热榜标题热词流程

    目录 前言 环境部署 实现过程 创建项目 定义Item实体 关键词提取工具 爬虫构造 中间件代码构造 制作自定义pipeline settings配置 执行主程序 执行结果 总结 前言 接着我的上一篇:Python 详解爬取并统计CSDN全站热榜标题关键词词频流程 我换成Scrapy架构也实现了一遍.获取页面源码底层原理是一样的,Scrapy架构更系统一些.下面我会把需要注意的问题,也说明一下. 提供一下GitHub仓库地址:github本项目地址 环境部署 scrapy安装 pip insta

  • Python爬取商家联系电话以及各种数据的方法

    上次学会了爬取图片,这次就想着试试爬取商家的联系电话,当然,这里纯属个人技术学习,爬取过后及时删除,不得用于其它违法用途,一切后果自负. 首先我学习时用的是114黄页数据. 下面四个是用到的模块,前面2个需要安装一下,后面2个是python自带的. import requests from bs4 import BeautifulSoup import csv import time 然后,写个函数获取到页面种想要的数据,记得最后的return返回一下,因为下面的函数要到把数据写到csv里面.

  • python爬取分析超级大乐透历史开奖数据第1/2页

    博主作为爬虫初学者,本次使用了requests和beautifulsoup库进行数据的爬取 爬取网站:http://datachart.500.com/dlt/history/history.shtml -500彩票网 (分析后发现网站源代码并非是通过页面跳转来查找不同的数据,故可通过F12查找network栏找到真正储存所有历史开奖结果的网页) 如图: 爬虫部分: from bs4 import BeautifulSoup #引用BeautifulSoup库 import requests #

  • python爬取淘宝商品详情页数据

    在讲爬取淘宝详情页数据之前,先来介绍一款 Chrome 插件:Toggle JavaScript (它可以选择让网页是否显示 js 动态加载的内容),如下图所示: 当这个插件处于关闭状态时,待爬取的页面显示的数据如下: 当这个插件处于打开状态时,待爬取的页面显示的数据如下:   可以看到,页面上很多数据都不显示了,比如商品价格变成了划线价格,而且累计评论也变成了0,说明这些数据都是动态加载的,以下演示真实价格的找法(评论内容找法类似),首先检查页面元素,然后点击Network选项卡,刷新页面,可

  • Python爬取YY评级分数并保存数据实现过程解析

    前言 当需要进行大规模查询时(比如目前遇到的情形:查询某个省所有发债企业的YY评级分数),人工查询显然太过费时,那就写个爬虫吧. 由于该爬虫实在过于简单,就只简单概述下. 一.请求端 通过观察YY评级的网页信息,如下图(F12或右击进入检查,点击network->XHR->headers). 红色框表明是个get请求(其实这种网页基本都是Ajax get,需要总结实际url的规律的). 绿色框即为实际URL,通过分析该URL,其由两部分组成.前半部分为" https://web.ra

  • python爬取m3u8连接的视频

    本文为大家分享了python爬取m3u8连接的视频方法,供大家参考,具体内容如下 要求:输入m3u8所在url,且ts视频与其在同一路径下 #!/usr/bin/env/python #_*_coding:utf-8_*_ #Data:17-10-08 #Auther:苏莫 #Link:http://blog.csdn.net/lingluofengzang #PythonVersion:python2.7 #filename:download_movie.py import os import

随机推荐