这次主要用requests库和Beautifusoup库来实现对糗百的热门帖子的用户信息的收集,由于糗百的反爬虫不是很严格,也不需要先登录才能获取数据,所以较简单。

思路,先请求首页的热门帖子获得用户详情链接,然后请求用户详情页,用Beautifusoup解析得到基本的用户信息

代码:

 #!/usr/bin/env python
# -*- coding:utf-8 -*-
import requests
import json
import urllib3
import pymongo
from bs4 import BeautifulSoup urllib3.disable_warnings() class Qsbk():
def __init__(self,url):
self.url = url # 糗事百科首页热门帖子链接
self.base_url = 'https://www.qiushibaike.com' # 用于用户链接拼接
self.user_info = {} # 保存用户信息
self.headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3282.186 Safari/537.36'
} # 请求头信息
self.proxies = {
'http':'192.168.105.71:80',
'https':'192.168.105.71:80'
} # 使用代理
self.file = open('qsbk.json','a',encoding='utf-8') # 把用户信息保存到json文本中,以追加的形式 def get_data(self):
try:
response = requests.get(url=self.url,headers=self.headers,proxies=self.proxies,verify=False).text # 请求糗百热门页面
soup = BeautifulSoup(response,'lxml')
node_list = soup.find_all('div',class_='author clearfix')
for node in node_list:
item = node.find('a')
if item != None: # 某些匿名帖子没有用户链接,需要排除掉
link = item.get('href') # 得到用户详情链接
user_link = self.base_url + link
# print(user_link)
self.parse_data(user_link) # 请求详情页并解析得到用户信息
except Exception as e:
print(e) def parse_data(self,user_link):
try:
result = requests.get(user_link,headers=self.headers,proxies=self.proxies,verify=False).content.decode()
soup = BeautifulSoup(result,'lxml')
status = soup.find('h3').get_text()
if '当前用户已关闭糗百个人动态' in status: # 排除关闭糗百的用户
pass
else:
username = soup.find('h2').get_text()
self.user_info['用户名'] = username
node_list = soup.find_all('div',class_="user-statis user-block")
fans = node_list[0].select('ul > li')[0].get_text().split(':',1)[-1] #得到是“粉丝数:111”类似的数据,需要先用":"分割然后得到具体的数字,后续信息类似
concerns = node_list[0].select('ul > li')[1].get_text().split(':',1)[-1]
comments = node_list[0].select('ul > li')[3].get_text().split(':',1)[-1]
coins = node_list[0].select('ul > li')[4].get_text().split(':',1)[-1]
marriage = node_list[1].select('ul > li')[0].get_text().split(':',1)[-1]
job = node_list[1].select('ul > li')[2].get_text().split(':',1)[-1]
web_age = node_list[1].select('ul > li')[4].get_text().split(':',1)[-1]
self.user_info['粉丝数'] = fans
self.user_info['关注数'] = concerns
self.user_info['评论'] = comments
self.user_info['笑脸'] = coins
self.user_info['婚姻'] = marriage
self.user_info['职业'] = job
self.user_info['糗龄'] = web_age
# print(self.user_info)
self.save_json() # 保存数据到json文件中
self.save_mongo() # 保存到MongoDB中
except Exception as e:
print(e) def save_json(self):
content = json.dumps(self.user_info,ensure_ascii=False) + '\n' # 每行结束后换行
self.file.write(content)
self.file.close() def save_mongo(self):
try:
self.client = pymongo.MongoClient(host='localhost', port=27107)
self.col = self.client['qsbk']['qsbk']
self.col.insert(self.user_info)
except Exception as e:
print(e) if __name__ == '__main__':
for i in range(1,3):
url = 'https://www.qiushibaike.com/8hr/page/{}/'.format(i)
# print(url)
qsbk = Qsbk(url)
qsbk.get_data()

爬虫实例之使用requests和Beautifusoup爬取糗百热门用户信息的更多相关文章

  1. 爬虫(十六):scrapy爬取知乎用户信息

    一:爬取思路 首先我们应该找到一个账号,这个账号被关注的人和关注的人都相对比较多的,就是下图中金字塔顶端的人,然后通过爬取这个账号的信息后,再爬取他关注的人和被关注的人的账号信息,然后爬取被关注人的账 ...

  2. 爬虫系列(十) 用requests和xpath爬取豆瓣电影

    这篇文章我们将使用 requests 和 xpath 爬取豆瓣电影 Top250,下面先贴上最终的效果图: 1.网页分析 (1)分析 URL 规律 我们首先使用 Chrome 浏览器打开 豆瓣电影 T ...

  3. 爬虫系列(十一) 用requests和xpath爬取豆瓣电影评论

    这篇文章,我们继续利用 requests 和 xpath 爬取豆瓣电影的短评,下面还是先贴上效果图: 1.网页分析 (1)翻页 我们还是使用 Chrome 浏览器打开豆瓣电影中某一部电影的评论进行分析 ...

  4. 基于webmagic的爬虫小应用--爬取知乎用户信息

    听到“爬虫”,是不是第一时间想到Python/php ? 多少想玩爬虫的Java学习者就因为语言不通而止步.Java是真的不能做爬虫吗? 当然不是. 只不过python的3行代码能解决的问题,而Jav ...

  5. [Python爬虫] Selenium爬取新浪微博客户端用户信息、热点话题及评论 (上)

    转载自:http://blog.csdn.net/eastmount/article/details/51231852 一. 文章介绍 源码下载地址:http://download.csdn.net/ ...

  6. 利用 Scrapy 爬取知乎用户信息

    思路:通过获取知乎某个大V的关注列表和被关注列表,查看该大V和其关注用户和被关注用户的详细信息,然后通过层层递归调用,实现获取关注用户和被关注用户的关注列表和被关注列表,最终实现获取大量用户信息. 一 ...

  7. 【Python项目】爬取新浪微博个人用户信息页

    微博用户信息爬虫 项目链接:https://github.com/RealIvyWong/WeiboCrawler/tree/master/WeiboUserInfoCrawler 1 实现功能 这个 ...

  8. Srapy 爬取知乎用户信息

    今天用scrapy框架爬取一下所有知乎用户的信息.道理很简单,找一个知乎大V(就是粉丝和关注量都很多的那种),找到他的粉丝和他关注的人的信息,然后分别再找这些人的粉丝和关注的人的信息,层层递进,这样下 ...

  9. 爬虫实战--利用Scrapy爬取知乎用户信息

    思路: 主要逻辑图:

随机推荐

  1. Linux下mongodb安装及数据导入导出教程

    Linux下mongodb安装及数据导入导出教程 #查看linux发行版本 cat /etc/issue #查看linux内核版本号 uname -r 一.Linux下mongodb安装的一般步骤 1 ...

  2. 如何解决mac下MAMP不能重启apache server的问题

    第一步:检查问题  在终端输入:sudo /Applications/MAMP/Library/bin/apachectl start  终端会提示你那个目录下的那个文件出现了什么问题 第二步:逐一排 ...

  3. linux 复制粘贴

    如果想把文件内的第三行内容黏贴到第十五行: 1.进入你的文件,(处于命令模式,而不是编辑模式) 2.将你的光标移到你的第三行的开头(用方向键) 3,按下v,(你发现切换到可视模式了),按方向键,知道选 ...

  4. php 代码的执行

    PHP内核的实现和世界上绝大数的程序一样,接收输入数据,做相应处理后输出结果.用PHP编写的代码就是输入数据,PHP内核对编写的代码进行解释和运算,最后返回运算结果.当编写的PHP代码给内核去执行的时 ...

  5. [NSDate distantPast]使用

    本文转载至 http://blog.sina.com.cn/s/blog_5f1967e00101ge0i.html  使用下面的方法: 关闭定时器不能使用invalidate方法,应该使用下面的方法 ...

  6. 自然语言处理(NLP)资源

    1.HMM学习最佳范例全文文档,百度网盘链接: http://pan.baidu.com/s/1pJoMA2B 密码: f7az 2.无约束最优化全文文档 -by @朱鉴 ,百度网盘链接:链接:htt ...

  7. Reverse and Compare(DP)

    Reverse and Compare Time limit : 2sec / Memory limit : 256MB Score : 500 points Problem Statement Yo ...

  8. Adjacency List

    w Python Patterns - Implementing Graphs | Python.orghttps://www.python.org/doc/essays/graphs/ Graph ...

  9. 修改 /var/lib/locales/supported.d/local 文件(使用 locale -a 命令查看系统中所有已配置的 locale)

    转自:http://zyxhome.org/wp/cc-prog-lang/c-stdlib-setlocale-usage-note/ http://www.west263.com/info/htm ...

  10. Vue中watch的简单应用

    Vue.js 有一个方法 watch,它可以用来监测Vue实例上的数据变动. 如果对应一个对象,键是观察表达式,值是对应回调,值也可以是方法名,或者是对象,包含选项. 下面写两个demo,参考demo ...