Python3.6+Scrapy爬取知乎用户数据,保存到MongoDB和CSV文件

最近写了一个爬虫,爬取知乎用户数据,将爬取的数据保存在一个csv文件和MongoDB数据库。经测试可以一次性爬取数万条数据,而不被ban掉。

代码见:https://github.com/wangjun1996/zhihuUser_spider   

(运行项目中  zhihuUser/main.py  即可开始爬虫)

 

爬虫目标

爬虫要实现的内容有:

1.从一个大V用户开始,通过递归抓取粉丝列表和关注列表,实现知乎所有用户的详细信息的抓取。

2.将爬取的数据保存在一个csv文件和MongoDB数据库

 

思路分析

每个人都有关注列表和粉丝列表,尤其对于大V来说,粉丝和关注尤其更多。

如果从一个大V开始,首先可以获取他的个人信息,然后获取他的粉丝列表和关注列表,然后遍历列表中的每一个用户,进一步抓取每一个用户的信息还有他们各自的粉丝列表和关注列表,然后再进一步遍历获取到的列表中的每一个用户,进一步抓取他们的信息和关注粉丝列表,循环往复,不断递归,这样就可以做到一爬百,百爬万,万爬百万,通过社交关系自然形成了一个爬取网,这样就可以爬到所有的用户信息了。通过分析知乎的请求就可以得到相关接口,通过请求接口就可以拿到用户详细信息和粉丝、关注列表。

 

开发环境

Python3

本项目使用的 Python 版本是 Python3.6

Scrapy

Scrapy 是一个强大的爬虫框架

 

生成的CSV文件

 

爬虫数据字段说明

    name: 用户名

    headline:标题

    description: 个人简介

    url:个人主页

    url_token:用来制作url的用户名参数

    gender: 性别。“1”表示男,“0”表示女

    badge:个人成就  

    locations: 居住地

    educations:教育经历

    business: 所在行业

    employments:公司

    job:工作岗位

    answer_count:回答数

    articles_count:文章数

    favorite_count:收藏数

    favorited_count:被收藏数

    follower_count:粉丝数

    following_columns_count:关注的专栏数

    following_count: 该用户关注了多少人

    pins_count:想法数

   question_count:  提问数

    thanked_count:获得感谢数

    voteup_count:获赞数

    following_favlists_count:关注的收藏夹数

    following_question_count:关注的问题数

    following_topic_count: 关注的话题数

    marked_answers_count:知乎收录的回答数

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
好的,下面是一个示例代码,可以实现将考研相关数据存储到MongoDBCSV文件中: ```python import scrapy import pymongo import csv class KaoyanSpider(scrapy.Spider): name = 'kaoyan' allowed_domains = ['www.kaoyan.com'] start_urls = ['https://www.kaoyan.com/'] def parse(self, response): # 解析页面数据,提取考研相关信息 items = response.xpath('//div[@class="content"]/ul/li') for item in items: name = item.xpath('.//h2/a/text()').get() school = item.xpath('.//h3/a/text()').get() major = item.xpath('.//p/text()').get() score = item.xpath('.//span/text()').get() # 将数据存储到MongoDB中 self.save_to_mongodb(name, school, major, score) # 将数据存储到CSV文件中 self.save_to_csv(name, school, major, score) def save_to_mongodb(self, name, school, major, score): # 连接MongoDB数据库 client = pymongo.MongoClient('mongodb://localhost:27017/') db = client['kaoyan'] collection = db['scores'] # 插入数据数据库中 data = {'name': name, 'school': school, 'major': major, 'score': score} collection.insert_one(data) def save_to_csv(self, name, school, major, score): # 将数据写入CSV文件中 with open('kaoyan.csv', 'a', newline='', encoding='utf-8') as f: writer = csv.writer(f) writer.writerow([name, school, major, score]) ``` 在上述代码中,我们定义了一个名为`KaoyanSpider`的Spider,用于爬取考研相关数据。在`parse`函数中,我们使用XPath选择器提取页面数据,并将其存储到MongoDBCSV文件中。数据存储到MongoDB中需要先连接到MongoDB数据库,然后通过`insert_one`方法插入数据数据存储到CSV文件中则使用Python内置的csv模块实现,通过`writerow`方法将数据写入CSV文件中。 需要注意的是,MongoDBCSV文件的存储路径和格式可以根据自己的需求进行修改。此外,为了保证爬虫的稳定性和可靠性,我们还需要进行异常处理、反爬虫处理等操作,以避免被网站封禁或数据出现异常。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

wangjun0708

你的打赏将是我创作的最大动力!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值