爬虫实例之使用requests和Beautifusoup爬取糗百热门用户信息
这次主要用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爬取糗百热门用户信息的更多相关文章
- 爬虫(十六):scrapy爬取知乎用户信息
一:爬取思路 首先我们应该找到一个账号,这个账号被关注的人和关注的人都相对比较多的,就是下图中金字塔顶端的人,然后通过爬取这个账号的信息后,再爬取他关注的人和被关注的人的账号信息,然后爬取被关注人的账 ...
- 爬虫系列(十) 用requests和xpath爬取豆瓣电影
这篇文章我们将使用 requests 和 xpath 爬取豆瓣电影 Top250,下面先贴上最终的效果图: 1.网页分析 (1)分析 URL 规律 我们首先使用 Chrome 浏览器打开 豆瓣电影 T ...
- 爬虫系列(十一) 用requests和xpath爬取豆瓣电影评论
这篇文章,我们继续利用 requests 和 xpath 爬取豆瓣电影的短评,下面还是先贴上效果图: 1.网页分析 (1)翻页 我们还是使用 Chrome 浏览器打开豆瓣电影中某一部电影的评论进行分析 ...
- 基于webmagic的爬虫小应用--爬取知乎用户信息
听到“爬虫”,是不是第一时间想到Python/php ? 多少想玩爬虫的Java学习者就因为语言不通而止步.Java是真的不能做爬虫吗? 当然不是. 只不过python的3行代码能解决的问题,而Jav ...
- [Python爬虫] Selenium爬取新浪微博客户端用户信息、热点话题及评论 (上)
转载自:http://blog.csdn.net/eastmount/article/details/51231852 一. 文章介绍 源码下载地址:http://download.csdn.net/ ...
- 利用 Scrapy 爬取知乎用户信息
思路:通过获取知乎某个大V的关注列表和被关注列表,查看该大V和其关注用户和被关注用户的详细信息,然后通过层层递归调用,实现获取关注用户和被关注用户的关注列表和被关注列表,最终实现获取大量用户信息. 一 ...
- 【Python项目】爬取新浪微博个人用户信息页
微博用户信息爬虫 项目链接:https://github.com/RealIvyWong/WeiboCrawler/tree/master/WeiboUserInfoCrawler 1 实现功能 这个 ...
- Srapy 爬取知乎用户信息
今天用scrapy框架爬取一下所有知乎用户的信息.道理很简单,找一个知乎大V(就是粉丝和关注量都很多的那种),找到他的粉丝和他关注的人的信息,然后分别再找这些人的粉丝和关注的人的信息,层层递进,这样下 ...
- 爬虫实战--利用Scrapy爬取知乎用户信息
思路: 主要逻辑图:
随机推荐
- redhat6.5安装ntfs-3g rpm来支持ntfs文件系统挂载
linux安装ntfs-3g模块来支持ntfs文件系统挂载 所需包 fuse-2.9.3.tar.gz ntfs-3g_ntfsprogs-2011.4.12.tgz step1. 解压fuse-2. ...
- 内存空间申请(C)
标准C,C++: malloc----free new----delete WINDOWS API: gnew(.net) LocalAlloc----LocalFree GlobalAlloc--- ...
- day22模块和包
一.模块 常见的场景:一个模块就是一个包含了python定义和声明的文件,文件名就是模块名字加上.py的后缀. 但其实import加载的模块分为四个通用类别: 1 使用python编写的代码(. ...
- es6 async与await实战
在使用js的时候,我们经常会遇到一个问题,就是我们需要等待请求返回再做下一步处理,之前的处理方式是通过ajax的success或者callback之类的方法,不过一层一层真的恶心,而且只是针对单个页面 ...
- TCP和UDP 协议发送数据包的大小
在进行UDP编程的时候,我们最容易想到的问题就是,一次发送多少bytes好? 当然,这个没有唯一答案,相对于不同的系统,不同的要求,其得到的答案是不一样的,这里仅对像ICQ一类的发送聊天消息的情况作分 ...
- Linux下权限掩码umask
一 权限掩码umask umask是chmod配套的,总共为4位(gid/uid,属主,组权,其它用户的权限),不过通常用到的是后3个,例如你用chmod 755 file(此时这文件的权限是属主读( ...
- 转:: 刺鸟:用python来开发webgame服务端(4)
来源:http://ciniao.me/article.php?id=14 --------------- 刺鸟原创文章,转载请注明出处 前面的工作都已准备就绪,现在我们得来看看服务端怎么和客户 ...
- 45、Android事件总线分发库的使用
事件总线分发库EventBus和Otto的简介及对比 什么是事件总线管理: a.将事件放到队列里,用于管理和分发b.保证应用的各个部分之间高效的通信及数据.事件分发c.模块间解耦 Event Bus是 ...
- 记录-Jquery uploadify文件上传实例
原本做的是from表单的文件上传,后来因需要用ajax异步,so接触到了Jquery uploadify上传 贴上代码,以供参考 需要引入的js文件 <link href="../re ...
- 移动端之touch事件--手指的滑动事件
转自[B5教程网]:http://www.bcty365.com/content-142-5243-1.html 总结:touchmove的最后坐标减去touchstart的起始坐标.X的结果如果正数 ...