爬虫实例之使用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爬取知乎用户信息
思路: 主要逻辑图:
随机推荐
- apache2+svn Expected FS format '2'; found format '3'
format格式与svn版本号我猜对应如下: 1.4.x 对应 format 2 1.5.x 对应 format 3 …… 1.8.x 对应 format 6 那么每个format创建出的repo要用 ...
- Material design之Material Theme
Material Theme提供了三方面的内容: 系统组件的颜色可以自定义更改 系统组件添加了触摸反馈动画效果 Activity切换动画效果 系统主题默认被定义在以下三个样式中: 使用Material ...
- iOS ---APP更换应用图标logo
iOS 10.3 加入了了更换应用图标的新功能,开发者可以为应用提供多个应用图标选择.用户可以自由的在这些图标之间切换,下面具体查看切换步骤. 1.先把你需要的所有图片都导入项目中(比例为1:1) 2 ...
- PHP 代码简洁之道 ( PHP Clean Code)
https://laravel-china.org/topics/7774/the-conciseness-of-the-php-code-php-clean-code
- cocos2d-x - android 学习(集成NDK、配置开发环境)
先来贴上一大神的博客:日月之明 --- http://www.cnblogs.com/lhming/tag/cocs2d-x/ 需要工具和软件包:Eclipse.Android SDK.Android ...
- 【BZOJ2730】[HNOI2012]矿场搭建 Tarjan
[BZOJ2730][HNOI2012]矿场搭建 Description 煤矿工地可以看成是由隧道连接挖煤点组成的无向图.为安全起见,希望在工地发生事故时所有挖煤点的工人都能有一条出路逃到救援出口处. ...
- 导出excel页面假死
如果是asp.net页面 public override void VerifyRenderingInServerForm(Control control) {} 如果是Sharepoint w ...
- 【转】哈希(Hash)与加密(Encrypt)的基本原理、区别及工程应用
0.摘要 今天看到吉日嘎拉的一篇关于管理软件中信息加密和安全的文章,感觉非常有实际意义.文中作者从实践经验出发,讨论了信息管理软件中如何通过哈希和加密进行数据保护.但是从文章评论中也可以看出很多朋友对 ...
- 字符串 转 时间戳 unix_timestamp('2018-07-01 0:0:0')
SELECT FROM_UNIXTIME(createtime,'%Y%m%d') AS d, s.app,SUM(o.val) FROM orders o LEFT JOIN app_type s ...
- PHP-Heredoc用法:<<<EOFEOF;
Heredoc,用来输出大段的HTML和JavaScript <<<EOF后面不能有空格. EOF;末尾的结束符必须靠边,并且前面不能有空格和缩进符. 例如: $mazey=< ...