爬虫实例之使用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爬取知乎用户信息
思路: 主要逻辑图:
随机推荐
- 009android初级篇之APP中使用系统相机相册等集成应用
android应用中使用相机功能,大致有两种方式实现: 直接调用系统内部的相机程序,显示的也是系统预设的界面(简单,只有简单的拍照功能): 自己去implement一个相机程序(不难,较具备弹性,但相 ...
- Fibonacci数列的幂和 zoj 3774
题目大意: 求斐波那契数列前n项的k次幂和 Mod 1000000009. n<=1e18, k<=1e5 这题的k比较大,所以不能用矩阵乘法来递推.学到了新姿势... http ...
- zmq重点
The zmq_msg_send(3) method does not actually send the message to the socket connection(s). It queues ...
- System、应用程序进程的Binder线程池和Handler消息循环
首先看一张Android系统启动流程图:
- Machine Learning第十周笔记:大规模机器学习
博客已经迁移到Marcovaldo's blog (http://marcovaldong.github.io/) 刚刚完毕了Andrew Ng在Cousera上的Machine Learning的第 ...
- iphone断点下载,断点续传
本文转载至 http://blog.csdn.net/zaitianaoxiang/article/details/6650469 - (void)loadView { NSURLConnection ...
- java数据结构之枚举
Enumeration接口中定义了一些方法,通过这些方法可以枚举(一次获得一个)对象集合中的元素. import java.util.Vector; import java.util.Enumerat ...
- nginx发布的nginScript
nginx发布的nginScript 背景 2015年9月,nginx宣布支持类JavaScript语言.这意味着开发者可以更轻松.自由的控制全球最优秀的HTTP及反向代理服务器,并在此之上可以衍生出 ...
- 2014-08-28——移动端web开发,基本Meta标签
1.<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scal ...
- Docker + ElasticSearch + Node.js
最近有空就想研究下ElasticSearch. 此篇文章用来记录研究过程.备注:需要有一定的docker基础,ElasticSearch的基本概念 Docker安装ElasticSearch 首先,就 ...