这次主要用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. eclipse 配置JDK

    JDK安装成功,eclipse也安装成功,这时候实际上是可以不配置JDK,因为系统已经默认给你配置好了,但是下面的情况需要配置:1.你系统中安装了多个JDK,某个项目工程需要更高版本的JDK等 工具/ ...

  2. javascript对象定义

    转载自:http://blog.sina.com.cn/s/blog_75a8cfac0100pif0.html javascript定义对象写法 javascript定义对象的几种简单方法 1.构造 ...

  3. 第1周---python网络爬虫规则

    第一节:requests库入门 第二节:网络爬虫的"盗亦有道" 第三节:requests库的网络爬虫实例

  4. Oracle注入速查表

    注:下面的一部分查询只能由admin执行,我会在查询的末尾以"-priv“标注. 探测版本: SELECT banner FROM v$version WHERE banner LIKE ‘ ...

  5. IOS开发UI篇之──自定义加载等待框(MBProgressHUD)

    本文转载至 http://blog.csdn.net/xunyn/article/details/8064984   原文地址http://www.189works.com/article-89289 ...

  6. [Spring MVC]学习笔记--@Controller

    在讲解@Controller之前,先说明一下Spring MVC的官方文档在哪. 可能会有人和我一样,在刚接触Spring MVC时,发现在Spring的网站上找不到Spring MVC这个项目. 这 ...

  7. Mybatis Insert 返回主键ID

    <insert id="insert" useGeneratedKeys="true" keyProperty="u_Id" para ...

  8. <2013 12 28> AOI PCB设计

    主要设计指标: “3.多块拼板最大尺寸:60*50(CM)4. 检测速度:(230-250)片/小时 5.检测通过率:98%6.最窄线宽:设两种精度 A.最窄线宽:0.2mm, 识别精度 0.1mm  ...

  9. QBuffer简单操作(被看做一个标准的可随机访问的文件,支持信号)

    Qt中通过QBuffer类我们可以使用io的方式访问.操作QByteArray中的内容.此时,QByteArray被看做一个标准的可随机访问的文件.例如: QBuffer buffer; char c ...

  10. 洛谷 P4109 [HEOI2015]定价

    洛谷 这是今天的考试题,我来发一波- 看L和R的范围,显然不能一个一个加,这样会有很多重复情况,会超时,只要看该数有多少个后导0,就把L加上10的多少次方. 很容易可以想到价格后面尽可能多0, 在此基 ...