目录

前言

问题

问题1:User-agent,Cookie怎么获取

问题2:DNT:1代表什么意思

问题3:各种错误

问题4:一些符号的认知

问题5:re的某些参数、函数使用

问题6:数据爬取的不必要部分删除(re)--去除文本中的html标签

问题7:运行中的小问题

阶段总结


前言

毕业论文需要对热门微博的评论做情绪分析,第一步就是将其爬取下来。以下是学习使用Python爬取热门微博评论时遇到的问题以及解决措施,希望通过纪录这一过程,能使自己对Python爬取有更深的了解并且更加得心应手。

使用Python 3.7.6,开发环境是awaconda spyder。

问题


问题1:User-agent,Cookie怎么获取

2021/4/25

解决:

目前使用的是360浏览器,似乎大家用Google Chrome、Firefox比较多。

1.以要爬取的微博评论页面为例,点击右键选择审查元素,或者fn+f12;(注意:360浏览器应处于兼容模式)

2.点击网络、文档,并刷新原页面;

3.点击出现的文档,即可看到User-agent,Cookie。

问题解决!!!


问题2:DNT:1代表什么意思

2021/4/25

解决:

DNT: 1 #Do not track 禁止跟踪,等于1不跟踪,等于0,可以跟踪。

我的http请求报文里没有这个参数,目前不知道为什么。


问题3:各种错误

2021/4/25

1.invalid syntax错误

解决:

格式问题,1.中英文标点符号混用;2.缩进不对称;3符号没写全(比如说括号只写一边)

注意:错误不一定是发生在标错的这一行,而可能是上一行代码没打逗号

2.expected an indented block错误

解决:

expected an indented block翻译为:应为缩进块。

python中没有像C语言使用{}来表示从属关系,而是使用缩进表示上下级关系。

表现在两个方面,1. 冒号后面是要写上一定的内容的(比如for循环后缺少内容);2.缩进不规范,少些或多些了一个空格。


问题4:一些符号的认知

2021/4/25

/t

\t :代表着四个空格也就是一个tab


问题5:re的某些参数、函数使用

2021/4/25

解决:

re.simport re
a = '''asdfhellopass:123worldaf'''
b = re.findall('hello(.*?)world',a)
c = re.findall('hello(.*?)world',a,re.S)
print('b is ' , b)
print('c is ' , c)运行结果b is  []
c is  ['pass:\n\t123\n\t']

1.如果不使用re.S参数,则只在每一行内进行匹配,如果一行没有,就换下一行重新开始,不会跨行。以上例子hello world没在一行同时出现,因此运行结果为[]。

2.而使用re.S参数以后,正则表达式会将这个字符串作为一个整体,将“\n”当做一个普通的字符加入到这个字符串中,在整体中进行匹配。(\t 制表符,四个空格)

(.*?)和(.*)差别import re
a = 'xxIxxjshdxxlovexxsffaxxpythonxx'
infos = re.findall('xx(.*?)xx', a)
print(infos)运行结果infos=['I','love','python']
import re
a = 'xxIxxjshdxxlovexxsffaxxpythonxx'
infos = re.findall('xx(.*)xx', a)
print(infos)运行结果infos=['Ixxjshdxxlovexxsffaxxpython']

1.前者成为非贪婪模式,获取最短的能满足条件的字符串。即匹配最少数量的字符串。

2.后者称为贪婪模式,获取最长的满足条件的字符串。

re.findall(pattern,string,flags=0)例如:pattern = re.compile('<span class="ctt">.*?</span>', re.S)
items = re.findall(pattern,html)

1.pattern-->正则表达式,如上'<span class="ctt">.*?</span>';

2.string-->需要处理的字符串,如上html;

3.flags-->说明匹配模式,如是否大小写re.I,如上re.s。

compile(pattern, flags=0)例如:pattern = re.compile('<span class="ctt">.*?</span>', re.S)
items = re.findall(pattern,html)

1.可以看出compile()函数返回的是一个匹配对象,它单独使用就没有任何意义,需要和findall(), search(), match()搭配使用。后两个目前尚未接触。
2.compile()与findall()一起使用,返回一个列表([])。


问题6:数据爬取的不必要部分删除(re)--去除文本中的html标签

2021/4/27

import requests
import re
import time
def get_one_page(url):#请求函数:获取某一网页上的所有内容headers = {'User-agent' : 'Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.198 Safari/537.36','Host' : 'weibo.cn','Accept' : 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9','Accept-Language' : 'zh-CN,zh;q=0.9','Accept-Encoding' : 'gzip, deflate, br','Cookie' : '__guid=78840338.395723498896766800.1614827954177.1052; _T_WM=5bc74849d535f00293f749878e764e20; SCF=ArFQLJ4ABAvZ9WAhO-pwlHTKWAFOGG2AVIYy7K6D6uakNQByHb607kYaIilL6WlwHqs7FME0F1sKKPUNfJLdHC8.; SUB=_2A25NgKmADeRhGeNG7FMY9CfKwz2IHXVuijfIrDV6PUJbktANLRD-kW1NSz7tYRDUBWe6Pm0MBV6eB2ARAmtm82DC; SUBP=0033WrSXqPxfM725Ws9jqgMF55529P9D9Whscar7Al8Hv5Vp5-yf1gC45NHD95Qf1hMp1KB4SonpWs4Dqcj_i--fi-2Xi-2Ni--4iK.4i-2Ei--fi-82iK.7i--NiKLWiKnXi--ci-z7i-zX; SSOLoginState=1619319248; monitor_count=12','DNT':'1','Connection' : 'keep-alive',}#请求头的书写,包括User-agent,Cookie等response = requests.get(url,headers = headers)#利用requests.get命令获取网页htmlif response.status_code == 200:#状态为200即为爬取成功return response.text#返回值为html文档,传入到解析函数当中return None
def parse_one_page(html):#解析html并存入到文档result.txt中pattern = re.compile('<span class="ctt">.*?</span>', re.S)items = re.findall(pattern,html)result = str(items)with open('result.txt','a',encoding='utf-8') as fp:fp.write(result)
for i in range(71): url = "https://weibo.cn/comment/hot/JcGJh837D?rl=1&page="+str(i)html = get_one_page(url)print('正在爬取第 %d 页评论' % (i+1))parse_one_page(html)time.sleep(2)

利用以上代码尝试爬取了某个微博的网民评论,借鉴的是热门微博问题爬取_Python爬取微博评论并制作酷炫的词云!这个博客的代码,经过爬取形成了result.txt文件,但是爬取的数据包含了'<span class="ctt">和</span>',以及图片的代码端,如<img alt="[doge]" src="//h5.sinaimg.cn/m/emoticon/icon/others/d_doge-be7f768d78.png" style="width:1em; height:1em;" />,这些需要删除,进行数据清洗!

解决:

搜索了非常久,一直搞不定,一是因为不知道如何描述我的问题(后来总结为去除爬取文本的html标签),二是代码修改后再运行数据在文件中是叠加的,修改后的数据在后方呈现,而我一直看前面原本就错误的文本,导致修改一直认为不对(解决:删除原文本,再运行,得到一个新的文本)。

最后借鉴的是去除文本中的html标签,非常快速的去除了html标签。

a=['222','dfwefw','ttbtbt']
b = ''.join(a) #转化成字符串的类型
c=str(b) #另一种转化字符串类型的方法d = re.sub('<[^<]+?>', '', c).replace('\n', '').strip() #重要的是这个正则表达式

以下是在实例中的替代

 result = str(items)result1=re.sub('<[^<]+?>', '', result).replace('\n', '').strip()

去除后的效果如下(换行是我自己人工换的看看有没有问题),为节省时间只爬前四页:

这个代码有个小问题,就是如果图片在文字前,他就会把这部分全部替代为空,因此要完善。


问题7:运行中的小问题

range(5)range(1,5)

前者代表从0开始,0,1,2,3,4。因此爬取页面的时候会导致第一页被爬取两次。

后者代表从1开始,1,2,3,4。因此之后采取这行代码。


阶段总结

根据他人的代码,最终形成以下效果:

1.但是明显可以看出jieba分词不够准确,有一些明显不符合中文习惯的词,比如说“不犯”、“以其人”等,因此在接下来进一步学习中要看看有没有更合理的分词手段。分词的有效性对情绪分析的准确度提升有帮助,要考虑情感词典的配合。

2.另外前面的数据爬取只是一个很简单的操作,之后还要对评论者的一些相关信息进行爬取,因此数据储存最好是采用表格的形式,或者是数据库的形式。

Python爬取热门微博评论--问题与解决(1)相关推荐

  1. 备忘1:爬取热门微博评论

    '''python3''' '''2018/04/03''' import requests import os import re import csv import time import jso ...

  2. Python爬取热门微博,并存储到MySQL中

    目标网站:m.weibo.cn url的获取可以从浏览器的F12中的network的XHR中找到. weibo_demo.py: import requests import json from w3 ...

  3. python+selenium爬虫,使用selenium爬取热门微博数据

    python爬虫使用selenium爬取热门微博数据 完整代码 from selenium.webdriver import Chrome import time import csvf = open ...

  4. Python爬取京东商品评论

    京东商城的页面不是静态页面,其评论信息存放于json文件中,由ajax控制,所以我们在浏览器上看到的网页源代码和用Python爬下来的是不一样的,所以我们真正要爬取的是评论数据所存放的json文件. ...

  5. Python爬取京东商品评论和图片下载

    Python爬取京东商品评论和图片下载 代码仅供学习使用,切勿扩散并且频繁爬取网站 贴上代码和注释,方便自己下次看 import requests import time import json im ...

  6. python爬取B站评论制作词云

    python爬取B站评论制作词云 江山代有才人出,B站评论占一半 废话不多说,咱们直接上代码` import imageio import jieba import wordcloud import ...

  7. python爬淘宝app数据_一篇文章教会你用Python爬取淘宝评论数据(写在记事本)

    [一.项目简介] 本文主要目标是采集淘宝的评价,找出客户所需要的功能.统计客户评价上面夸哪个功能多,比如防水,容量大,好看等等. [二.项目准备工作] 准备Pycharm,下载安装等,可以参考这篇文章 ...

  8. Python - 爬取豆瓣短评评论

    Python - 爬取豆瓣短评评论 import requests from bs4 import BeautifulSoup import re import time# 保存豆瓣评分 source ...

  9. 用python爬取天猫商品评论并分析(2)

    用python爬取天猫商品评论并分析(2) 之前介绍过天猫数据的爬取和数据初步处理,今天介绍下 将采集的评论进行文本分析!下面是总流程: 0. 主要流程 0. 数据采集 这一步参考网址:https:/ ...

  10. python爬取爱情公寓电影评论并制作词云

    python爬取爱情公寓电影评论并制作词云 前言:     一直想研究研究如何生成词云,今天抽点时间给大家分享一下制作词云的过程,本文重在研究词云如何制作,由于时间仓促,至于爬取的数据量不大,大家可自 ...

最新文章

  1. synchronized与Lock的区别与使用
  2. _extend用法总结
  3. Swift - 移除页面视图上的所有元素
  4. activiti的processEngine空指针异常
  5. 经典论文复现 | InfoGAN:一种无监督生成方法
  6. v1.0.2-2017.04.26
  7. codevs1287 矩阵乘法
  8. SEO行业的路上没有捷径
  9. C++11 decltype
  10. YACC(BISON)使用指南
  11. 高教杯数学建模国赛论文模板+2013到2019年的国赛优秀论文+2020年数学建模论文心得---数学建模友友必看
  12. css绘制卡券优惠券_使用css创建一个优惠券的方法
  13. mysql mpm_部署zabbix监控mysql (三) MPM插件介绍和部署
  14. hadoop-hive安装
  15. 你要小心那些涉世不深的老实人
  16. 精美个人导航html源码
  17. python爬取LOL皮肤
  18. Android数据备份(Android Data Backup)
  19. java语言程序设计郑莉课后答案_Java语言程序设计郑莉课后习题答案.pdf
  20. java毕业设计_校园外卖跑腿系统

热门文章

  1. PHP入门《PHP程序设计案例教程》-- PHP语法基础
  2. memcached的安装
  3. php在线运行调试工具源码
  4. ae合成设置快捷键_AE超实用快捷键你了解多少?
  5. 操作系统的概念,功能,作用
  6. 计算机无法识别建行网盾,建行网银盾无法识别 如何解决这种问题?
  7. 网页倒计时跳转JS代码
  8. [Linux] 非root安装Lefse软件及其数据分析
  9. 【计算理论】图灵机 ( 图灵机设计 )
  10. 数据流程图,业务流程图,模块结构图