前言

由于虎扑页面的限制,因为访问虎扑步行街的第11个页面就需要用户进行登录,鉴于此时技术还没有学全,只能爬取1到10的页面。

抓取什么数据

  • 帖子名称
  • 帖子链接
  • 发帖人
  • 发帖人链接
  • 发帖时间
  • 帖子回复数
  • 帖子浏览数
  • 最后回复帖子的人
  • 最后回复的时间

如何抓取数据

  • 首先我们发现这个页面是用gzip进行压缩的,gzip是用utf-8进行编码的,也就是我们抓取的页面是用utf-8编码的,而r.text返回的是unicode编码的字符串,如果我们直接用就会出现乱码,因此,我们用r.content,返回的bytes数据(抓取音频,文件),然后将这个页面从utf-8解码为unicode编码

    html = r.content
    html = html.decode('utf-8') #将utf-8解码为unicode
    

  • 抓取数据对应的字段的html标签(代码中看)

用Mongodb存放抓取到的数据

  • 需要注意的问题,就是可能会出现本来在第一页的帖子,然后凉了啥的,被顶到了第二页,那么这时候就不能存放在数据库中,所以每次插入数据要进行判断一下

代码

import requests
from bs4 import BeautifulSoup
import time
from pymongo import MongoClientdef get_page(link):data_list = []headers = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:71.0) Gecko/20100101 Firefox/71.0"}r = requests.get(link, headers=headers)html = r.contenthtml = html.decode('utf-8') #将utf-8解码为unicodesoup = BeautifulSoup(html, 'lxml')for_list = soup.find('ul', class_="for-list")for_list = for_list.find_all('li')for each_for in for_list:# 帖子名称for_name = each_for.find('div', class_="titlelink box").a.text.strip()# 帖子链接for_link = each_for.find('div', class_="titlelink box").a['href']for_link = 'https://bbs.hupu.com' + for_link# 作者for_writer = each_for.find('div', class_="author box").a.text.strip()# 作者链接for_writer_link = each_for.find('div', class_= "author box").a['href']# 帖子创建时间for_createtime = each_for.find('div', class_= "author box")# 获取节点的所有子节点,然后发现时间在列表中第6项for_createtime = for_createtime.contents   for_createtime = for_createtime[5].text.strip()# 回复数for_reply_numbers = each_for.find('span', class_= "ansour box").text.split('/')[0].strip()# 浏览数for_see_numbers = each_for.find('span', class_= "ansour box").text.split('/')[1].strip()# 最后回复用户for_last_reply_user = each_for.find('div', class_="endreply box").span.text.strip()#最后回复时间for_last_reply_time = each_for.find('div', class_="endreply box").a.text.strip()data_list.append([for_name, for_link, for_writer, for_writer_link, for_createtime, for_reply_numbers,for_see_numbers, for_last_reply_user,for_last_reply_time])return data_listclass sort_by_Mongodb:def __init__(self, db_host, db_port, db_name, coll_name):self.db_host = db_hostself.db_port = db_portself.db_name = db_nameself.coll_name = coll_nameself.client = MongoClient(host=self.db_host, port=self.db_port)self.db = self.client[self.db_name]self.coll = self.db[self.coll_name]def update(self, query, insert_data):# query表示查询条件, insert_data表示更新的数据,其实在本例中就是要插入的数据self.coll.update_one(query, {'$set':insert_data}, upsert=True)# upsert (optional): If True, perform an insert if no documents match the filter.def main():link = "https://bbs.hupu.com/bxj-"# 超过第10个页面就需要登录了。。。。for i in range(1,11):link_temp = link + str(i)data_list = get_page(link_temp) #返回的是列表的列表a = sort_by_Mongodb("localhost", 27017, "hupu", "buxingjie")for each in data_list:insert_dict = {"帖子名称": each[0],"帖子链接": each[1],"发帖人": each[2],"发帖人链接": each[3],"发帖时间": each[4],"贴子回复数": each[5],"帖子浏览数": each[6],"最后回复帖子的人": each[7],"最后回复时间": each[8]}# 帖子链接肯定是不一样的,因此把这个作为筛选条件a.update({"帖子链接": each[1]}, insert_dict)print("第"+ str(i)+ "页面存取完成!!!!!!!!!!!")time.sleep(2)if __name__ == "__main__":main()

结果截图

一共抓取到1151条贴子,对于10个页面来说,好像差不多吧~

python网络爬虫-爬取虎扑步行街数据相关推荐

  1. Python网络爬虫爬取虎扑步行街爆照区话题

    Python网络爬虫爬取虎扑步行街爆照区话题 作者:郜科科 最近的任务挺多的,但是心情很烦躁,想做一些自己喜欢的东西,前些时候感觉Python爬虫很好玩,就自学了一下.本人比较喜欢逛街--虎扑步行街, ...

  2. python爬虫爬取虎扑步行街爆照区图片

    开始动手的时候毫无头绪,主要借鉴了以下帖子: https://blog.csdn.net/sinat_28797501/article/details/70195443 但是后来发现代码中还是有一些不 ...

  3. BeautifulSoup爬取虎扑步行街信息到Mysql

    人生苦短,我用python 今天给大家爬取虎扑步行街的详细信息 效果图如下: 首先根据虎扑步行街链接获取前十个页面链接 for i in range(1, 10):link = "https ...

  4. 如何利用Python网络爬虫爬取微信朋友圈动态--附代码(下)

    前天给大家分享了如何利用Python网络爬虫爬取微信朋友圈数据的上篇(理论篇),今天给大家分享一下代码实现(实战篇),接着上篇往下继续深入. 一.代码实现 1.修改Scrapy项目中的items.py ...

  5. python朋友圈动态_如何利用Python网络爬虫爬取微信朋友圈动态--附代码(下)

    前天给大家分享了如何利用Python网络爬虫爬取微信朋友圈数据的上篇(理论篇),今天给大家分享一下代码实现(实战篇),接着上篇往下继续深入. 一.代码实现 1.修改Scrapy项目中的items.py ...

  6. python抓取朋友圈动态_如何利用Python网络爬虫爬取微信朋友圈动态--附代码(下)...

    原标题:如何利用Python网络爬虫爬取微信朋友圈动态--附代码(下) 前天给大家分享了如何利用Python网络爬虫爬取微信朋友圈数据的上篇(理论篇),今天给大家分享一下代码实现(实战篇),接着上篇往 ...

  7. Python:网络爬虫爬取某表情包网站

    Python:网络爬虫爬取某表情包网站 参考: 爬虫基础知识点汇总(html文件基础和4个常用库 超级详细长文预警) [爬虫教程]吐血整理,最详细的爬虫入门教程~ HTML的简单介绍 HTML的全称为 ...

  8. 用python网络爬虫爬取英雄联盟英雄图片

    用python爬虫爬取lol皮肤. 这也用python网络爬虫爬取lol英雄皮肤,忘了是看哪个大神的博客(由于当时学了下就一直放在这儿,现在又才拿出来,再加上马上要考二级挺忙的.),代码基本上是没改, ...

  9. 使用python网络爬虫爬取新浪新闻(一)

    使用python网络爬虫爬取新浪新闻 第一次写博客,感觉有点不太习惯!不知道怎么突然就想学学爬虫了,然后就用了一天的时间,跟着教程写了这个爬虫,!不说废话了,我将我从教程上学习的东西整个写下来吧,从头 ...

最新文章

  1. (五)Docker镜像和容器
  2. fl out of focus插件_高质量插件之激励器篇
  3. 初学java之JFrame窗口模式
  4. -bash: ulimit: pipe size: cannot modify limit: Invalid argument
  5. LeetCode 743. 网络延迟时间(最短路径)
  6. 输出一个数的二进制序列中1的个数(三种方法)
  7. keepalived+lvs搭建高可用负载均衡集群
  8. NOIP201208同余方程
  9. Java接口自动化之Maven工具使用
  10. Asp.net 无限级分类
  11. 获取到的数组在webview中成了字符串
  12. 手把手教你彻底卸载MySQL
  13. MATLAB生成正弦码表
  14. 位,字节,字符的区别是什么?
  15. 【每日一题】一起冲击蓝桥杯吧——Day1【蓝桥真题】
  16. python怎么测试一个网站的延迟_Python检测网络延迟的代码
  17. CVS投中app数据采集
  18. Android运行ListView的代码,Android ListView组件详解及示例代码
  19. 干货!TPAUC指标的end-to-end 优化方法
  20. pytorch环境配置

热门文章

  1. Espcms通杀SQL注入漏洞分析(附EXP)
  2. cad模糊查询符号_模糊查询(排除%等通配符并支持不连续关键字查询)
  3. hooker pro入门文档
  4. 关于Mac使用Matlab卡顿严重的原因和解决方案
  5. Centos7 搭建Openv*n
  6. 孙子定理 中国剩余定理
  7. 【数学竞赛】极限—洛必达法则
  8. 第二章计算机网络答案,《计算机网络》第二章-作业参考答案
  9. AIX的vmstat命令详解(原创)
  10. JS中的反斜杠 (\)是什么意思