知乎爬虫经验教程

2023-10-27

为了完成课程论文研究,暑假写了关于知乎的爬虫,把用户主页/回答中能爬到的数据全都爬下来了。接下来,把我踩过的坑跟大家分享,希望大家少走一些弯路!

1.导入一些必要的python包,其中会包括我们接下来要使用的函数;

import re
import urllib3
from bs4 import BeautifulSoup
from selenium import webdriver
from selenium.webdriver.firefox.firefox_binary import FirefoxBinary
from selenium.webdriver.common.desired_capabilities import DesiredCapabilities
from selenium.webdriver.support.ui import WebDriverWait
import time
import sys
import pymysql 
#与数据库连接相关的模块
import random
#便于随机选择头部
import string
#修改数据类型时,对字符串的处理
import sqlite3
#写入csv操作
import csv

2.读取每个用户的url,便于之后直接登陆用户的个人主页,对其页面进行解析

db1 = pymysql.connect("。。。","。。。","。。。","。。。" )
cursor = db1.cursor()
sql_0="SELECT id from user"
cursor.execute(sql_0)
result_id = cursor.fetchall() #获取已经爬取的user_id存放在result_id中
result=list(result_id)
db1.close

3.新建csv文件,便于存储爬取、解析下来的数据。在这里也可以直接写入数据库中,但是为了后期数据处理、分析的方便,我们直接存储在了csv文件中

with open("文件路径","w") as csvfile:
writer = csv.writer(csvfile)
# 写入表头
writer.writerow([你的字段值])
csvfile.close()
    

4.到目前为止,我们已经建立好了存储文件,并且也有了用户个人主页的url,接下来就需要遍历每个用户的主页,爬取网页信息并进行解析了。这是一个机械重复的工作,因此我们选择了for循环。

5.对每个用户进行分析的过程:

首先是将个人网页信息爬取下来,
        

    http = urllib3.PoolManager()
    time.sleep(1)
    response = http.request('GET',urls,cl_header)
    content = BeautifulSoup(response.data)

再对爬取下来的信息进行解析,这里最关键的就是要找准你需要信息的网页标签、网页元素名称。

        # 获取用户的基本信息:用户名、性别
        user_info_sex = -1    #初始化
        user_info_name = ''   # 初始化
        user_info_name =  content.find('span','ProfileHeader-name').get_text()    # 用户名
        
        # 用户的性别是用一个标签判定的,这个标签可能出现也可能不出现
        a = content.find_all('div','ProfileHeader-iconWrapper')
        if len(a) == 0:
            user_info_sex = -1
        elif a[len(a)-1].svg['class'][1] == 'Icon--male':
            user_info_sex = 1 #男性
        elif a[len(a)-1].svg['class'][1] == 'Icon--female':
            user_info_sex = 0 #女性
        else:
            user_info_sex = -1
        
        #静态页面抓取 - 用户知识共享行为数据
        user_info_answer = int(comb.join(list(filter(str.isdigit,content.find_all('span','Tabs-meta')[0].get_text()))))       #回答数
        user_info_ask = int(comb.join(list(filter(str.isdigit,content.find_all('span','Tabs-meta')[1].get_text()))))         #提问数
        user_info_article = int(comb.join(list(filter(str.isdigit,content.find_all('span','Tabs-meta')[2].get_text()))))      #文章数
        user_info_column = int(comb.join(list(filter(str.isdigit,content.find_all('span','Tabs-meta')[3].get_text()))))       #专栏数
        user_info_pins = int(comb.join(list(filter(str.isdigit,content.find_all('span','Tabs-meta')[4].get_text()))))        #想法数
        #静态页面抓取_3 - 平台对用户的粘性、社会资本等
        user_info_followee = int(comb.join(list(filter(str.isdigit,content.find_all('strong','NumberBoard-itemValue')[0].get_text()))))   #关注其他用户数
        user_info_follower = int(comb.join(list(filter(str.isdigit,content.find_all('strong','NumberBoard-itemValue')[1].get_text()))))  #粉丝数
        #用户赞助live,及举办的live、关注问题数
        #for j in range(0,len(content.find_all('span','Profile-lightItemName'))):
        # user_info_attention = content.find_all('a','Profile-lightItem')[j].get_text()
        #关注类别

最后写入到数据库中,这里我们还是写入到csv存储文件中

with open("存储文件路径及文件名","a+",newline='') as csvfile:
            writer = csv.writer(csvfile)
            # 写入数据
            writer.writerow([你要写入的字段值])
            csvfile.close()

以上就是获取用户基本信息的爬虫教程,我们再来进一步总结:

首先需要导入一些包、模块,里面会有我们爬取网页、解析网页内容需要的函数;

然后创建好数据库、存储文件,便于将数据直接写入;

前期工作准备好之后,再利用for循环对每个用户进行数据获取:先登录网页,再获取页面信息,然后从中根据页面元素解析出你需要的信息,并写入到数据库、存储文件中。

这就是网络爬取用户信息的全部步骤了。欢迎指正。

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

知乎爬虫经验教程 的相关文章

随机推荐

  • 解决运行flutter doctor --android-licenses时报错

    问题描述 配置flutter环境时 会使用flutter doctor命令来检查运行flutter的相关依赖是否配好 能看到还差 Android license status unknown 未解决 C Users ipkiss wu gt
  • 5 个最令人兴奋的 ES13 功能

    ES13 ECMAScript 2022 已经发布很久了 并且更新了许多有用的功能 在这篇文章中 我想与大家分享 5 种我最喜欢的技术 这些技术是我已经开始在工作中实施的 1 顶级await await 是我最喜欢的功能 因为它使我的代码显
  • python调用m文件

    系统环境 windows 64bit matlab 2018b 64bit python3 6 前提 windows下需要有matlab软件和python python调用m文件需要安装matlab engine 注意matlab版本与py
  • 类模板下运算符重载的两种用法

    1 template
  • java编写定时器,定时执行某个方法

    第一步 编写测试类 该类extends TimerTask 重新run 方法 run方法里面就是你要执行的逻辑代码 示例如下 import java text SimpleDateFormat import java util Date i
  • Python如何调用js函数?

    Python如何调用SDK的js函数 一 概述 二 环境准备 三 调用方法 步骤 四 Demo演示基础版 五 常见问题 六 深入了解 待更新 七 参考资料 一 概述 测试web前端 前端SDK web渗透流程等时 难免会需要调用前端js里面
  • 【Linux】浏览器写代码!部署code-server远程vscode网页

    部署code server远程vscode网页 在浏览器上写代码 参考文档 https developer aliyun com article 876967 slide 7 本文首发于 慕雪的寒舍 1 什么是code server 注意
  • 奔跑吧恐龙----基于JavaSwing的一个跑酷游戏

    1 游戏功能 随机出现障碍物 人物可以通过向上跳进行避免 游戏结束后出现分数 对难度进行一定的控制 当分数 gt 1000时难度升级 当分数 gt 4000时 难度再进行升级 并存在音乐播放功能 2 具体实现 2 1 model 1 Din
  • C++基于TCP/IP简单的客户端、服务器通信程序实例

    本篇文章实现了一个基于TCP 的一个非常简单的客户 服务器通信程序实例 该程序中通讯协议使用的是面向连接的TCP协议SOCK STREAM 服务器的ip地址为本地地址即 127 0 0 1 端口号为自定义的5099 大于1024即可 服务端
  • springBoot入门(快速搭建一个springBoot项目)

    目录 一 SpringBoot介绍 1 定义 2 springBoot简化的配置 3 应用打包 二 springBoot项目搭建 1 新建一个spring initializr项目 2 点击下一步 3 之后一个springBoot项目就构建
  • 好用的插件分享

    检查无用代码 Android studio gt 设置 gt Plugins gt 搜索PMD 安装QAPlug PMD 安装完成后重启Android studio
  • STM32--舵机(SG90)

    文章目录 一 介绍 二 工作原理 三 舵机的控制 四 设计流程 五 代码实现 六 舵机工程代码 七 备注 舵机 一 介绍 舵机是一种位置 角度 伺服的驱动器 适用于那些需要角度不断变化并可以保持的控制系统 目前在高档遥控玩具 如航模 包括飞
  • GitHub下载速度慢?找“马云”啊,干货帖

    大名鼎鼎的GitHub大家想必都知道 毕竟我这个无所事事的小白都知道 用多了GitHub的人应该对下面这种情况非常熟悉 当然 有的时候是不会下载失败的 还是会有个10k 8k的 注意我这里说的可不是工资 但是对于一个突然醒悟要好好学习的程序
  • Python编码问题总结

    问题一 当python中间处理非ASCII编码时 经常会出现如下错误 UnicodeDecodeError ascii codec can t decode byte 0x in position 1 ordinal not in rang
  • js对象方法Object.assign( )详解

    1 基本用法 Object assign方法用于对象的合并 将源对象 source 的所有可枚举属性 复制到目标对象 target var target a 1 var source1 b 2 var source2 c 3 Object
  • neo4j--Cypher查询调优与执行计划

    1 查询调优 1 1查询如何执行 Cypher执行引擎会将每个Cypher查询都转为一个执行计划 在执行查询时 执行计划将告知Neo4j执行什么样的操作 1 2查询性能分析 查看执行计划对查询进行分析时有两个Cypher语句可用 1 2 1
  • 关系型数据库和非关系型数据库类比

    1 关系型数据库 关系型数据库 是指采用了关系模型来组织数据的数据库 关系模型是在1970年由IBM的研究员E F Codd博士首先提出的 在之后的几十年中 关系模型的概念得到了充分的发展并逐渐成为主流数据库结构的主流模型 简单来说 关系模
  • win10 WMDC安装

    解决方案 WMDC in Windows 10 junipersys com 参考连接 Previous WMDC fixes for Windows 10 junipersys com amd64 https junipersys com
  • linux中把程序启到前台,Linux程序前台后台切换

    1 在Linux终端运行命令的时候 在命令末尾加上 符号 就可以让程序在后台运行 root Ubuntu tcpserv01 2 如果程序正在前台运行 可以使用 Ctrl z 选项把程序暂停 然后用 bg number 命令把这个程序放到后
  • 知乎爬虫经验教程

    为了完成课程论文研究 暑假写了关于知乎的爬虫 把用户主页 回答中能爬到的数据全都爬下来了 接下来 把我踩过的坑跟大家分享 希望大家少走一些弯路 1 导入一些必要的python包 其中会包括我们接下来要使用的函数 import re impo