• 爬取时间:2019-10-12
  • 爬取难度:★★☆☆☆☆
  • 请求链接:https://bbs.hupu.com/bxj
  • 爬取目标:爬取虎扑论坛步行街的帖子,包含主题,作者,发布时间等,数据保存到 MongoDB 数据库
  • 涉及知识:请求库 requests、解析库 Beautiful Soup、数据库 MongoDB 的操作
  • 完整代码:https://github.com/TRHX/Python3-Spider-Practice/tree/master/BasicTraining/hupu
  • 其他爬虫实战代码合集(持续更新):https://github.com/TRHX/Python3-Spider-Practice
  • 爬虫实战专栏(持续更新):https://itrhx.blog.csdn.net/article/category/9351278

文章目录

  • 【1x00】循环爬取网页模块
  • 【2x00】解析模块
  • 【3x00】MongoDB 数据储存模块
  • 【4x00】完整代码
  • 【5x00】数据截图
  • 【6x00】程序不足的地方

【1x00】循环爬取网页模块

观察虎扑论坛步行街分区,请求地址为:https://bbs.hupu.com/bxj

第一页:https://bbs.hupu.com/bxj

第二页:https://bbs.hupu.com/bxj-2

第三页:https://bbs.hupu.com/bxj-3

不难发现,每增加一页,只需要添加 -页数 参数即可,最后一页是第 50 页,因此可以利用 for 循环依次爬取,定义一个 get_pages() 函数,返回初始化 Beautiful Soup 的对象 page_soup,方便后面的解析函数调用

虽然一共有 50 页,但是当用户访问第 10 页以后的页面的时候,会要求登录虎扑,不然就没法查看,而且登录时会出现智能验证,所以程序只爬取前 10 页的数据

def get_pages(page_url):headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.142 Safari/537.36'}response = requests.get(url=page_url, headers=headers)page_soup = BeautifulSoup(response.text, 'lxml')return page_soupif __name__ == '__main__':for i in range(1, 11):url = 'https://bbs.hupu.com/bxj-' + str(i)soup = get_pages(url)

【2x00】解析模块

使用 Beautiful Soup 对网页各个信息进行提取,最后将这些信息放进一个列表里,然后调用列表的 .append() 方法,再将每条帖子的列表依次加到另一个新列表里,最终返回的是类似于如下形式的列表:

[['帖子1', '作者1'], ['帖子2', '作者2'], ['帖子3', '作者3']]

这样做的目的是:方便 MongoDB 依次储存每一条帖子的信息

def parse_pages(page_soup):data_list = []all_list = page_soup.find('ul', class_='for-list')post_list = all_list.find_all('li')# print(result_list)for post in post_list:# 帖子名称post_title = post.find('a', class_='truetit').text# print(post_title)# 帖子链接post_url = 'https://bbs.hupu.com' + post.find('a', class_='truetit')['href']# print(post_url)# 作者author = post.select('.author > a')[0].text# print(author)# 作者主页author_url = post.select('.author > a')[0]['href']# print(author_url)# 发布日期post_date = post.select('.author > a')[1].text# print(post_date)reply_view = post.find('span', class_='ansour').text# 回复数post_reply = reply_view.split('/')[0].strip()# print(post_reply)# 浏览量post_view = reply_view.split('/')[1].strip()# print(post_view)# 最后回复时间last_data = post.select('.endreply > a')[0].text# print(last_data)# 最后回复用户last_user = post.select('.endreply > span')[0].text# print(last_user)data_list.append([post_title, post_url, author, author_url, post_date, post_reply, post_view, last_data, last_user])# print(data_list)return data_list

【3x00】MongoDB 数据储存模块

首先使用 MongoClient() 方法,向其传入地址参数 host 和 端口参数 port,指定数据库为 hupu,集合为 bxj

将解析函数返回的列表传入到储存函数,依次循环该列表,对每一条帖子的信息进行提取并储存

def mongodb(data_list):client = MongoClient('localhost', 27017)db = client.hupucollection = db.bxjfor data in data_list:bxj = {'帖子名称': data[0],'帖子链接': data[1],'作者': data[2],'作者主页': data[3],'发布日期': str(data[4]),'回复数': data[5],'浏览量': data[6],'最后回复时间': str(data[7]),'最后回复用户': data[8]}collection.insert_one(bxj)

【4x00】完整代码

# =============================================
# --*-- coding: utf-8 --*--
# @Time    : 2019-10-12
# @Author  : TRHX
# @Blog    : www.itrhx.com
# @CSDN    : https://blog.csdn.net/qq_36759224
# @FileName: hupu.py
# @Software: PyCharm
# =============================================import requests
import time
import random
from pymongo import MongoClient
from bs4 import BeautifulSoupdef get_pages(page_url):headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.142 Safari/537.36'}response = requests.get(url=page_url, headers=headers)page_soup = BeautifulSoup(response.text, 'lxml')return page_soupdef parse_pages(page_soup):data_list = []all_list = page_soup.find('ul', class_='for-list')post_list = all_list.find_all('li')# print(result_list)for post in post_list:# 帖子名称post_title = post.find('a', class_='truetit').text# print(post_title)# 帖子链接post_url = 'https://bbs.hupu.com' + post.find('a', class_='truetit')['href']# print(post_url)# 作者author = post.select('.author > a')[0].text# print(author)# 作者主页author_url = post.select('.author > a')[0]['href']# print(author_url)# 发布日期post_date = post.select('.author > a')[1].text# print(post_date)reply_view = post.find('span', class_='ansour').text# 回复数post_reply = reply_view.split('/')[0].strip()# print(post_reply)# 浏览量post_view = reply_view.split('/')[1].strip()# print(post_view)# 最后回复时间last_data = post.select('.endreply > a')[0].text# print(last_data)# 最后回复用户last_user = post.select('.endreply > span')[0].text# print(last_user)data_list.append([post_title, post_url, author, author_url, post_date, post_reply, post_view, last_data, last_user])# print(data_list)return data_listdef mongodb(data_list):client = MongoClient('localhost', 27017)db = client.hupucollection = db.bxjfor data in data_list:bxj = {'帖子名称': data[0],'帖子链接': data[1],'作者': data[2],'作者主页': data[3],'发布日期': str(data[4]),'回复数': data[5],'浏览量': data[6],'最后回复时间': str(data[7]),'最后回复用户': data[8]}collection.insert_one(bxj)if __name__ == '__main__':for i in range(1, 11):url = 'https://bbs.hupu.com/bxj-' + str(i)soup = get_pages(url)result_list = parse_pages(soup)mongodb(result_list)print('第', i, '页数据爬取完毕!')time.sleep(random.randint(3, 10))print('前10页所有数据爬取完毕!')

【5x00】数据截图

一共爬取到 1180 条数据:

【6x00】程序不足的地方

程序只能爬取前 10 页的数据,因为虎扑论坛要求从第 11 页开始,必须登录账号才能查看,并且登录时会有智能验证,可以使用自动化测试工具 Selenium 模拟登录账号后再进行爬取。

Python3 爬虫实战 — 虎扑论坛步行街【requests、Beautiful Soup、MongoDB】相关推荐

  1. python3论坛_Python3 爬虫实战 — 虎扑论坛步行街

    爬取时间:2019-10-12 爬取难度:★★☆☆☆☆ 请求链接:https://bbs.hupu.com/bxj 爬取目标:爬取虎扑论坛步行街的帖子,包含主题,作者,发布时间等,数据保存到 Mong ...

  2. Python3 爬虫实战 — 豆瓣电影TOP250【requests、Xpath、正则表达式、CSV、二进制数据储存】

    爬取时间:2019-09-27 爬取难度:★★☆☆☆☆ 请求链接:https://movie.douban.com/top250 以及每部电影详情页 爬取目标:爬取榜单上每一部电影详情页的数据,保存为 ...

  3. Python3 爬虫实战 — 猫眼电影TOP100【requests、lxml、Xpath、CSV 】

    爬取时间:2019-09-23 爬取难度:★☆☆☆☆☆ 请求链接:https://maoyan.com/board/4 爬取目标:猫眼电影 TOP100 的电影名称.排名.主演.上映时间.评分.封面图 ...

  4. Python3 爬虫学习笔记 C08【解析库 Beautiful Soup】

    Python3 爬虫学习笔记第八章 -- [解析库 Beautiful Soup] 文章目录 [8.1]关于 Beautiful Soup [8.2]Beautiful Soup 的基本使用 [8.3 ...

  5. (转)虎扑论坛基因探秘:社群用户行为数据洞察

    论坛为有相同爱好的网友提供了广阔的互动交流平台,而由此积累下来的庞大数据和复杂的用户互动场景也蕴含着有价值的信息,本文对虎扑论坛的帖子.个人信息展开分析,探索虎扑论坛用户有哪些特点? ▼ tecdat ...

  6. 虎扑论坛用户数据分析报告

    原文:http://tecdat.cn/?p=4115 一.以下是摘自虎扑的官方介绍: 虎扑是为年轻男性服务的专业网站,涵盖篮球.足球.F1.NFL等赛事的原创新闻专栏视频报道,拥有大型的生活/影视/ ...

  7. python爬虫(爬虎扑英雄联盟论坛)

    第十五讲 BeautifulSoup解析HTML标签 爬虫实战项目(英雄联盟虎扑论坛) import requests url = 'https://bbs.hupu.com/lol' headers ...

  8. 虎扑论坛爬虫采集数据可视化分析

    原文链接:http://tecdat.cn/?p=2018 论坛为用户提供了相同的业余爱好,互动和交流的广阔平台,以及由此产生的庞大数据和复杂的用户交互场景也包含有价值的信息,本文关于虎扑论坛的帖子, ...

  9. 【Python爬虫】MongoDB爬虫实践:爬取虎扑论坛

    MongoDB爬虫实践:爬取虎扑论坛 网站地址为:https://bbs.hupu.com/bxj 1.网站分析 首先,定位网页上帖子名称.帖子链接.作者.作者链接.创建时间.回复数目.浏览数目.最后 ...

最新文章

  1. System.setProperty()
  2. js获取单选按钮的值
  3. opengl 教程(18) 漫反射光
  4. NOIP2011 D1 T2选择客栈
  5. python 教程 第二十一章、 扩展Python
  6. trim去除空格失败
  7. matlab 计算对数似然相似度
  8. “华为杯”山东理工大学第十一届ACM程序设计竞赛(正式赛)网络同步赛
  9. 从羽泉演唱会大数据看在线演出前景
  10. 一次阿里巴巴的电话面试
  11. 如何写一个一天爬取 100 万张网页的爬虫
  12. 晶振的各种参数代表什么意思?
  13. 【Unity 题型】脚本开发
  14. app被Rejected 的各种原因翻译
  15. 腾讯笔试算法题-开锁
  16. Linux、Windows、Mac安装JDK并配置环境变量(附删除原有jdk)
  17. 计算机系统i3和i6区别,英特尔内核迭代,有i3 i5 i7,没有i4 i6吗?
  18. 基于springboot万花筒系统 毕业设计-附源码345600
  19. Waymo SOTA!SparseKD:高效知识蒸馏下的3D检测(港大NIPS2022)
  20. floor puzzles

热门文章

  1. 将vim配置成强大的IDE编辑工具
  2. jeecms(jeecms官网)
  3. html404页面怎么添加,404怎么办-页面自适应html源码
  4. Hexo博客jsdelivr资源访问超时导致博客打不开
  5. 【javascript】基于websocket、nodejs、uniapp的聊天室
  6. 海报设计的设计技巧,掌握这几个技巧让你设计出完美海报
  7. AWS 推出增强的 Elasticsearch 开源发行版; 英国发行纪念霍金的硬币
  8. 阿里高可用的两大法宝
  9. 基于TI-335XD核心板的高精度腹膜透析仪
  10. Linux系统下Python的下载与安装