东方财富股吧是有反爬取机制的,我们通过减慢爬取速率的方法来避免爬取检测。这种方法爬取网页数据的速率很慢,并不会对网站的访问造成影响,当然我们可以改进方法,使得爬取数据更快。但并不鼓励大家非法爬取数据,只用作学习交流。
直接上代码吧:

import requests
from bs4 import BeautifulSoup
import time
import random
import csv  # 导入CSV安装包#f = open('test.csv', 'w', encoding='utf-8')
f = open('comment.csv', 'w', newline="")   #创建文件对象
csv_writer = csv.writer(f)  #基于文件对象构建 csv写入对象
csv_writer.writerow(["序号", "commentId", "text", "userId", "date", "likeCount", "fans"])
count = 0def getHtml(url):#下载网页源代码header = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64; Trident/7.0; LCTE; rv:11.0) like Gecko'}try:r = requests.get(url,headers=header)r.encoding = 'utf-8'#print(r.status_code)r.raise_for_status()return r.textexcept:getHtml(url)# region 随机延时# 固定延时x秒
def delay_x_0_s(fixed_delay_num):x = float(fixed_delay_num)time.sleep(x)# 随机延时 0~y 秒
def delay_0_y_s(random_delay_num):y = float(random_delay_num)time.sleep(random.random() * y)# 先固定延时x秒,再随机延时 0~y 秒
# 延时区间,包前不包后
def delay_x_y_s(fixed_delay_num, random_delay_num):delay_x_0_s(fixed_delay_num)delay_0_y_s(random_delay_num)# 随机延时 x~y 秒
# 延时区间,包前不包后
def delay_between_x_y_s(start_delay_num, end_delay_num):x = float(start_delay_num)y = float(end_delay_num)delay_x_0_s(x)delay_0_y_s(y - x)for page in range(100, 1001):delay_between_x_y_s(2, 5)url = "http://guba.eastmoney.com/list,zssh000001,f_" + str(page) + ".html"print(url)# url = 'http://guba.eastmoney.com/list,zssh000001,f_1.html'html = getHtml(url)soup = BeautifulSoup(html, "html.parser")#print(soup)contain = soup.find_all("div", {"class": "articleh"})   #获取存有数据的div标签,存在contain中,因为一个页面有多条评论,所以contain是一个列表。for i in contain[:]:   #遍历containtry:delay_between_x_y_s(2, 5)content = i.find("span", {"class": "l3 a3"}).find("a")    #获取一个div便签中第三个span标签下的a标签,其有href和title两个属性print(content)contentUrl = "http://guba.eastmoney.com"+content["href"]  #content["href"]是该评论的详细界面网址,因为其是相对地址,所以需要在前添加网址的前缀,得到完整的界面网址print("contentUrl: " + contentUrl + "\n")commentId = content["href"][-14:-5]   #我们观察content["href"]属性的值,发现其是具有规则的字符串,从该字符串的倒数第14个位置到倒数第5个位置是该条评论的idprint("commentId: " + commentId + "\n")text = content.attrs["title"] #获取评论文本(标题)print("text: " + text + "\n")userUrl = i.find("span", {"class": "l4 a4"}).find("a").attrs["href"]  #用同样的方法获取用户主页链接if userUrl == "/list,cjpl.html":continueprint("userUrl: " + userUrl + "\n")userId = userUrl[23:] #获取用户IDif userId == "":    #跳过讨论帖子continueif userId == "3006113720930996":    #跳过股吧账号continueif userId == "/3006113720930996":continueif userId == "7428111481466798":continueif userId == "6712111507146464":continueif userId == "6255325874333310":continueprint("userId: " + userId + "\n")delay_between_x_y_s(2, 5)commentHtml = getHtml(contentUrl)   # 获取评论详细信息源代码#print("commentHtml: " + commentHtml + "\n")soup = BeautifulSoup(commentHtml, "html.parser")#print(soup)date = soup.find("div", {"class": "zwfbtime"}).text[4:14]   # 获取评论发表时间print("date: " + date + "\n")#if date == "2020-07-01":#    continuelikeCount = int(soup.find("div", {"data-like_count": True}).attrs['data-like_count'])  # 获取评论点赞数,并转换成整数类型。(因为从html中获取会认为是字符串类型)print("likeCount: ", likeCount, "\n")#likeCount = int(soup.find("div", {"data-like_count": True}).attrs['data-like_count'])#print(likeCount)delay_between_x_y_s(2, 5)userHtml = getHtml(userUrl) # 获取用户主页源代码soup = BeautifulSoup(userHtml, "html.parser")#print(soup)fans = int(soup.find("a", {"id": "tafansa"}).find("span").text) # 获取用户粉丝数print("fans: ", fans, "\n")count = count + 1csv_writer.writerow([count, commentId, text, userId, date, likeCount, fans])except:print('出现异常,继续查看下一篇文章')continuef.close()

爬取东方财富股吧中评论数据相关推荐

  1. 爬取东方财富股吧评论

    前言 前天有人要我帮忙爬取一下东方财富网几只股票的股票吧评论,晚上花了点时间给他弄了一下,很简单啊 一.分析网站 打开东方财富网,网址很简单:600340这只股票评论一共1303页,每页的网址如下: ...

  2. 为了分析最近热点电影的观众爱好取向,爬取《镇魂》微博评论数据

    爬取<镇魂>微博数据 本文皆在于通过爬虫方式爬取微博镇魂. 编程语言:python2.7 依赖库:requests 系统环境:windows *本篇文章主要参考自Denise_hzf的博客 ...

  3. python微博爬虫实战_Python爬虫实战演练:爬取微博大V的评论数据

    本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,如有问题请及时联系我们以作处理. 以下文章来源于IT共享之家 ,作者: IT共享者 理论篇 试想一个问题,如果我们要抓取某个微博大V ...

  4. python 抓取微博评论破亿_Python爬虫实战演练:爬取微博大V的评论数据

    本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,如有问题请及时联系我们以作处理. 以下文章来源于IT共享之家 ,作者: IT共享者 理论篇 试想一个问题,如果我们要抓取某个微博大V ...

  5. python爬取东方财富网,并将数据导入mysql

    1.首先使用xpath获取网页中的表格数据,需要下载谷歌及与之版本相同的相关程序, 链接如下:ChromeDriver Mirror 我下载的正好是压缩过后就是如下程序: 2.然后就是连接mysql数 ...

  6. python爬取微博评论破亿_Python爬虫实战演练:爬取微博大V的评论数据

    本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,如有问题请及时联系我们以作处理. 以下文章来源于IT共享之家 ,作者: IT共享者 理论篇 试想一个问题,如果我们要抓取某个微博大V ...

  7. 爬取京东华为mate30Pro5G的评论数据并制作云词

    爬取京东评论数据采用selenium库 爬取代码如下: # -*- coding: utf-8 -*-from selenium import webdriver import json import ...

  8. Python爬虫实战演练:爬取微博大V的评论数据

    本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,如有问题请及时联系我们以作处理. 以下文章来源于IT共享之家 ,作者: IT共享者 理论篇 试想一个问题,如果我们要抓取某个微博大V ...

  9. selenium+chromedriver部署到云主机并爬取东方财富网的股票评论(一)

    Selenium+ChromeDriver:可以更方便的爬取网站主页,而不用考虑加密抓包之类的内容.但也有其缺点,工作效率不如requests快.而且在Linux无面板主机部署起来略麻烦. 部分操作摘 ...

最新文章

  1. Spring 集成dubbo 找不到dubbo.xsd 文件的问题的想法概述
  2. 这个神了,一目了然,确实好,看小姐姐用动图展示10大Git命令
  3. python操作neo4j
  4. 如何在VMware8虚拟机里安装Xp GHOST系统 解决不能启动Xp系统方法
  5. 博士期间要注意的几个问题
  6. 树莓派智能家居-语音聊天机器人实现
  7. verilog 学习记(如何编写assert)
  8. RK3399 Mali-T860占用率
  9. 3. static file process
  10. windows 空闲超时 非管理员如何破解
  11. 软考系统分析师备考详细介绍
  12. NumberFormat类
  13. JAVA项目中枚举和字典表,枚举与字典表的选择
  14. bios error 装系统acpi_重装系统遇到bios acpi错误。
  15. C语言——报数问题:有n个人围成一圈,顺序排号。从第一个人开始报数(从1到3报数),凡报到3的人退出圈子,问最后留下的是原来第几号的那位。
  16. 1553B数据总线用终端电连接器-DK-6211
  17. for单次循环参数对比-以ode45求一元二阶微分方程为例
  18. 服务创新产品“在线智能问诊”——互联网平台建设...
  19. 程序员c语言基础,《软考程序员》C语言基础
  20. python图片批量重命名

热门文章

  1. 第二章 CortexM3/M4基础
  2. 青松资讯:想窃取用户密码?一个“U盘”就能搞定
  3. 晶振使浙大食堂在年后摇身一变成网红食堂
  4. visual studio 2019工程运行时不要弹出cmd黑窗口
  5. Dojo Toolkit 创始人谈Dojo学习
  6. 稀土掘金与英特尔联合举办首届未来大会,技术、商业双视角探索产业数字化转型
  7. MySQL 5.7.24 安装、my.cnf配置文件
  8. 示坡线高程判断_批量获取示坡线的方法
  9. 奋斗吧,程序员——第四十三章 十步杀一人,千里不留行
  10. 怎么在CAD中创建异形视口?CAD异形视口创建教程