精华内容
下载资源
问答
  • python爬取微博评论
    2021-03-17 13:45:08

    怎样用python爬新浪微博大V所有数据

    先上结论,通过公开的api如爬到某大v的所有数据,需足以下两个条件:

    1、在你的爬虫开始运行时,该大v的所有微博发布量没有超过回溯查询的上限,新浪是2000,twitter是3200。

    2、爬虫程序必须不间断运行。

    新浪微博的api基本完全照搬twitter,其中接口的参数特性与底层的NoSQL密不可分,建议先看点Nosql数据库的设计理念有助于更好的理解api设计。

    一般来说,如果决定爬某个大v,第一步先试获取该用户的基本信息,中间会包含一条最新的status,记下其中的id号作为基准,命名为baseId。

    接口中最重要的两个参数:

    since_id:返回ID比since_id大的微博(即比since_id时间晚的微博),默认为0。

    max_id:返回ID小于或等于max_id的微博,默认为0。

    出于各种原因,获取statuses的接口,固定为按id降序排列(scan_index_forward=false),即最新的statuses返回在前。假设该微博第一天上线,就一个用户,发了一百条,id是1到100。而你在该用户发了第50条的时候开始运行的爬虫,即baseId=50。

    如何使用python爬取到高清原图

    # -*- coding:utf8 -*-

    # 2013.12.36 19:41 wnlo-c209

    # 抓取dbmei.com的图片

    from bs4 import BeautifulSoup

    import os, sys, urllib2

    # 创建文件夹,昨天刚学会

    path = os.getcwd()        # 获取此脚本所在目

    new_path = os.path.join(path,u'豆瓣妹子')

    if not os.path.isdir(new_path):

    os.mkdir(new_path)

    def page_loop(page=0):

    url = 'http://www.dbmeizi.com/?p=%s' % page

    content = urllib2.urlopen(url)

    soup = BeautifulSoup(content)

    my_girl = soup.find_all('img')

    # 加入结束检测,写的不好....

    if my_girl ==[]:

    print u'已经全部抓取完毕'

    sys.exit(0)

    print u'开始抓取'

    for girl in my_girl:

    link = girl.get('src')

    flink = 'http://www.dbmeizi.com/'   link

    print flink

    content2 = urllib2.urlopen(flink).read()

    with open(u'豆瓣妹子' '/' flink[-11:],'wb') as code:#在OSC上现学的

    code.write(content2)

    page = int(page)   1

    print u'开始抓取下一页'

    print 'the %s page' % page

    page_loop(page)

    page_loop()

    print "~~~~~~~~~~~~~~~~~~~~~~~~~~END~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"

    #为了避免双击的时候直接一闪退出,在最后面加了这么一句

    raw_input("Press To Quit!")

    如何使用python爬取豆瓣个人相册里的高清原图?

    给你个链接看看,改下正则表达式就可以了

    python爬虫

    用python 爬取微博评论,怎么打开微博评论下的查看更多

    基本的套路就是利博账号模拟登陆,这个过程复杂,因为微博有处理,去github下载一个python模拟登陆新浪的源码。

    当你通过模拟登陆进入微博界面的时候,尝试如何用python的模块去提交query,然后通过beautifulsoup或者是httpparse来获取内容信息。当然,自己学习正则表达式来获取也是可以的。

    版权声明:本站所有文章皆为原创,欢迎转载或转发,请保留网站地址和作者信息。

    更多相关内容
  • 给定微博id和爬取评论数量,爬取对应微博评论,便于下一步的分词和词频统计
  • python爬取微博评论(无重复数据)前言一、整体思路二、获取微博地址1、获取ajax地址2、解析页面中的微博地址3、获取指定用户微博地址三、获取主评论四、获取子评论1、解析子评论2、获取子评论五、主函数调用1、导入...
  • python爬取微博关键词搜索博文,只需要修改cookie和url参数
  • 源码包括: 通过python正则表达式爬取新浪微博热搜的标题与热度 连接mysql数据库,并将爬取数据直接写入数据库 mysql查询语句
  • 主要介绍了python爬虫爬取微博评论,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
  • 使用Python,对爬取微博评论,进行jieba分词,统计词频,修改路径即可。
  • python爬取微博评论的实例讲解

    千次阅读 2021-03-06 16:47:22
    python爬虫是程序员们一定会掌握的知识,...本文介绍python爬取微博评论的代码实例。一、爬虫微博与QQ空间爬虫类似,可以爬取新浪微博用户的个人信息、微博信息、粉丝、关注和评论等。爬虫抓取微博的速度可以达到 1...

    python爬虫是程序员们一定会掌握的知识,练习python爬虫时,很多人会选择爬取微博练手。python爬虫微博根据微博存在于不同媒介上,所爬取的难度有差异,无论是python新入手的小白,还是已经熟练掌握的程序员,可以拿来练手。本文介绍python爬取微博评论的代码实例。

    一、爬虫微博

    与QQ空间爬虫类似,可以爬取新浪微博用户的个人信息、微博信息、粉丝、关注和评论等。

    爬虫抓取微博的速度可以达到 1300万/天 以上,具体要视网络情况。

    难度程度排序:网页端>手机端>移动端。微博端就是最好爬的微博端。

    二、python爬虫爬取微博评论

    第一步:确定评论用户的id

    # -*- coding:utf-8 -*-

    import requests

    import re

    import time

    import pandas as pd

    urls = 'https://m.weibo.cn/api/comments/show?id=4073157046629802&page={}'

    headers = {'Cookies':'Your cookies',

    'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_6)

    AppleWebKit/537.36 (KHTML, like Gecko) Chrome/66.0.3359.181 Safari/537.36'}

    第二步:找到html标签

    tags = re.compile('?\w+[^>]*>')

    第三步:设置提取评论function

    def get_comment(url):

    j = requests.get(url, headers=headers).json()

    comment_data = j['data']['data']

    for data in comment_data:

    try:

    第四步:利用正则表达式去除文本中的html标签

    comment = tags.sub('', data['text']) # 去掉html标签

    reply = tags.sub('', data['reply_text'])

    weibo_id = data['id']

    reply_id = data['reply_id']

    comments.append(comment)

    comments.append(reply)

    ids.append(weibo_id)

    ids.append(reply_id)

    第五步:爬取评论

    df = pd.DataFrame({'ID': ids, '评论': comments})

    df = df.drop_duplicates()

    df.to_csv('观察者网.csv', index=False, encoding='gb18030')

    实例扩展:

    # -*- coding: utf-8 -*-

    # Created : 2018/8/26 18:33

    # author :GuoLi

    import requests

    import json

    import time

    from lxml import etree

    import html

    import re

    from bs4 import BeautifulSoup

    class Weibospider:

    def __init__(self):

    # 获取首页的相关信息:

    self.start_url = 'https://weibo.com/u/5644764907?page=1&is_all=1'

    self.headers = {

    "accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8",

    "accept-encoding": "gzip, deflate, br",

    "accept-language": "zh-CN,zh;q=0.9,en;q=0.8",

    "cache-control": "max-age=0",

    "cookie": 使用自己本机的cookie,

    "referer": "https://www.weibo.com/u/5644764907?topnav=1&wvr=6&topsug=1",

    "upgrade-insecure-requests": "1",

    "user-agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.96 Safari/537.36",

    }

    self.proxy = {

    'HTTP': 'HTTP://180.125.70.78:9999',

    'HTTP': 'HTTP://117.90.4.230:9999',

    'HTTP': 'HTTP://111.77.196.229:9999',

    'HTTP': 'HTTP://111.177.183.57:9999',

    'HTTP': 'HTTP://123.55.98.146:9999',

    }

    def parse_home_url(self, url): # 处理解析首页面的详细信息(不包括两个通过ajax获取到的页面)

    res = requests.get(url, headers=self.headers)

    response = res.content.decode().replace("\\", "")

    # every_url = re.compile('target="_blank" href="(/\d+/\w+\?from=\w+&wvr=6&mod=weibotime)" rel="external nofollow" ', re.S).findall(response)

    every_id = re.compile('name=(\d+)', re.S).findall(response) # 获取次级页面需要的id

    home_url = []

    for id in every_id:

    base_url = 'https://weibo.com/aj/v6/comment/big?ajwvr=6&id={}&from=singleWeiBo'

    url = base_url.format(id)

    home_url.append(url)

    return home_url

    def parse_comment_info(self, url): # 爬取直接发表评论的人的相关信息(name,info,time,info_url)

    res = requests.get(url, headers=self.headers)

    response = res.json()

    count = response['data']['count']

    html = etree.HTML(response['data']['html'])

    name = html.xpath("//div[@class='list_li S_line1 clearfix']/div[@class='WB_face W_fl']/a/img/@alt") # 评论人的姓名

    info = html.xpath("//div[@node-type='replywrap']/div[@class='WB_text']/text()") # 评论信息

    info = "".join(info).replace(" ", "").split("\n")

    info.pop(0)

    comment_time = html.xpath("//div[@class='WB_from S_txt2']/text()") # 评论时间

    name_url = html.xpath("//div[@class='WB_face W_fl']/a/@href") # 评论人的url

    name_url = ["https:" + i for i in name_url]

    comment_info_list = []

    for i in range(len(name)):

    item = {}

    item["name"] = name[i] # 存储评论人的网名

    item["comment_info"] = info[i] # 存储评论的信息

    item["comment_time"] = comment_time[i] # 存储评论时间

    item["comment_url"] = name_url[i] # 存储评论人的相关主页

    comment_info_list.append(item)

    return count, comment_info_list

    def write_file(self, path_name, content_list):

    for content in content_list:

    with open(path_name, "a", encoding="UTF-8") as f:

    f.write(json.dumps(content, ensure_ascii=False))

    f.write("\n")

    def run(self):

    start_url = 'https://weibo.com/u/5644764907?page={}&is_all=1'

    start_ajax_url1 = 'https://weibo.com/p/aj/v6/mblog/mbloglist?ajwvr=6&domain=100406&is_all=1&page={0}&pagebar=0&pl_name=Pl_Official_MyProfileFeed__20&id=1004065644764907&script_uri=/u/5644764907&pre_page={0}'

    start_ajax_url2 = 'https://weibo.com/p/aj/v6/mblog/mbloglist?ajwvr=6&domain=100406&is_all=1&page={0}&pagebar=1&pl_name=Pl_Official_MyProfileFeed__20&id=1004065644764907&script_uri=/u/5644764907&pre_page={0}'

    for i in range(12): # 微博共有12页

    home_url = self.parse_home_url(start_url.format(i + 1)) # 获取每一页的微博

    ajax_url1 = self.parse_home_url(start_ajax_url1.format(i + 1)) # ajax加载页面的微博

    ajax_url2 = self.parse_home_url(start_ajax_url2.format(i + 1)) # ajax第二页加载页面的微博

    all_url = home_url + ajax_url1 + ajax_url2

    for j in range(len(all_url)):

    print(all_url[j])

    path_name = "第{}条微博相关评论.txt".format(i * 45 + j + 1)

    all_count, comment_info_list = self.parse_comment_info(all_url[j])

    self.write_file(path_name, comment_info_list)

    for num in range(1, 10000):

    if num * 15 < int(all_count) + 15:

    comment_url = all_url[j] + "&page={}".format(num + 1)

    print(comment_url)

    try:

    count, comment_info_list = self.parse_comment_info(comment_url)

    self.write_file(path_name, comment_info_list)

    except Exception as e:

    print("Error:", e)

    time.sleep(60)

    count, comment_info_list = self.parse_comment_info(comment_url)

    self.write_file(path_name, comment_info_list)

    del count

    time.sleep(0.2)

    print("第{}微博信息获取完成!".format(i * 45 + j + 1))

    if __name__ == '__main__':

    weibo = Weibospider()

    weibo.run()

    展开全文
  • 这是新浪微博爬虫,采用python+selenium实现。 免费资源,希望对你有所帮助,虽然是傻瓜式...[Python爬虫] Selenium爬取新浪微博客户端用户信息、热点话题及评论 (上) 主要爬取内容包括: 新浪微博手机端用户信息
  • 主要介绍了Python网络爬虫之爬取微博热搜的相关知识,非常不错,具有一定的参考借鉴价值,需要的朋友可以参考下
  • python爬取微博评论(无重复数据).pdf
  • 利用Python爬取了一下赵丽颖的微博内容以及相关评论,并词云图展示。
  • python爬取微博视频

    2018-03-20 15:32:56
    可以自行输入想要爬取的博主的用户名,下载主页的视频,可以自行输入想要爬取的博主的用户名,下载主页的视频
  • 利用python实现爬取微博评论的方法

    千次阅读 2021-02-03 03:30:06
    利用python实现爬取微博评论的方法发布时间:2021-01-15 17:18:42来源:亿速云阅读:79作者:Leah本篇文章为大家展示了利用python实现爬取微博评论的方法,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇...

    利用python实现爬取微博评论的方法

    发布时间:2021-01-15 17:18:42

    来源:亿速云

    阅读:79

    作者:Leah

    本篇文章为大家展示了利用python实现爬取微博评论的方法,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。

    第一步:确定评论用户的id# -*- coding:utf-8 -*-

    import requests

    import re

    import time

    import pandas as pd

    urls = 'https://m.weibo.cn/api/comments/show?id=4073157046629802&page={}'

    headers = {'Cookies':'Your cookies',

    'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_6)

    AppleWebKit/537.36 (KHTML, like Gecko) Chrome/66.0.3359.181 Safari/537.36'}

    第二步:找到html标签tags = re.compile('?\w+[^>]*>')

    第三步:设置提取评论functiondef get_comment(url):

    j = requests.get(url, headers=headers).json()

    comment_data = j['data']['data']

    for data in comment_data:

    try:

    第四步:利用正则表达式去除文本中的html标签comment = tags.sub('', data['text']) # 去掉html标签

    reply = tags.sub('', data['reply_text'])

    weibo_id = data['id']

    reply_id = data['reply_id']

    comments.append(comment)

    comments.append(reply)

    ids.append(weibo_id)

    ids.append(reply_id)

    第五步:爬取评论df = pd.DataFrame({'ID': ids, '评论': comments})

    df = df.drop_duplicates()

    df.to_csv('观察者网.csv', index=False, encoding='gb18030')

    实例扩展:# -*- coding: utf-8 -*-

    # Created : 2018/8/26 18:33

    # author :GuoLi

    import requests

    import json

    import time

    from lxml import etree

    import html

    import re

    from bs4 import BeautifulSoup

    class Weibospider:

    def __init__(self):

    # 获取首页的相关信息:

    self.start_url = 'https://weibo.com/u/5644764907?page=1&is_all=1'

    self.headers = {

    "accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8",

    "accept-encoding": "gzip, deflate, br",

    "accept-language": "zh-CN,zh;q=0.9,en;q=0.8",

    "cache-control": "max-age=0",

    "cookie": 使用自己本机的cookie,

    "referer": "https://www.weibo.com/u/5644764907?topnav=1&wvr=6&topsug=1",

    "upgrade-insecure-requests": "1",

    "user-agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.96 Safari/537.36",

    }

    self.proxy = {

    'HTTP': 'HTTP://180.125.70.78:9999',

    'HTTP': 'HTTP://117.90.4.230:9999',

    'HTTP': 'HTTP://111.77.196.229:9999',

    'HTTP': 'HTTP://111.177.183.57:9999',

    'HTTP': 'HTTP://123.55.98.146:9999',

    }

    def parse_home_url(self, url): # 处理解析首页面的详细信息(不包括两个通过ajax获取到的页面)

    res = requests.get(url, headers=self.headers)

    response = res.content.decode().replace("\\", "")

    # every_url = re.compile('target="_blank" href="(/\d+/\w+\?from=\w+&wvr=6&mod=weibotime)" rel="external nofollow"  ', re.S).findall(response)

    every_id = re.compile('name=(\d+)', re.S).findall(response) # 获取次级页面需要的id

    home_url = []

    for id in every_id:

    base_url = 'https://weibo.com/aj/v6/comment/big?ajwvr=6&id={}&from=singleWeiBo'

    url = base_url.format(id)

    home_url.append(url)

    return home_url

    def parse_comment_info(self, url): # 爬取直接发表评论的人的相关信息(name,info,time,info_url)

    res = requests.get(url, headers=self.headers)

    response = res.json()

    count = response['data']['count']

    html = etree.HTML(response['data']['html'])

    name = html.xpath("//div[@class='list_li S_line1 clearfix']/div[@class='WB_face W_fl']/a/img/@alt") # 评论人的姓名

    info = html.xpath("//div[@node-type='replywrap']/div[@class='WB_text']/text()") # 评论信息

    info = "".join(info).replace(" ", "").split("\n")

    info.pop(0)

    comment_time = html.xpath("//div[@class='WB_from S_txt2']/text()") # 评论时间

    name_url = html.xpath("//div[@class='WB_face W_fl']/a/@href") # 评论人的url

    name_url = ["https:" + i for i in name_url]

    comment_info_list = []

    for i in range(len(name)):

    item = {}

    item["name"] = name[i] # 存储评论人的网名

    item["comment_info"] = info[i] # 存储评论的信息

    item["comment_time"] = comment_time[i] # 存储评论时间

    item["comment_url"] = name_url[i] # 存储评论人的相关主页

    comment_info_list.append(item)

    return count, comment_info_list

    def write_file(self, path_name, content_list):

    for content in content_list:

    with open(path_name, "a", encoding="UTF-8") as f:

    f.write(json.dumps(content, ensure_ascii=False))

    f.write("\n")

    def run(self):

    start_url = 'https://weibo.com/u/5644764907?page={}&is_all=1'

    start_ajax_url1 = 'https://weibo.com/p/aj/v6/mblog/mbloglist?ajwvr=6&domain=100406&is_all=1&page={0}&pagebar=0&pl_name=Pl_Official_MyProfileFeed__20&id=1004065644764907&script_uri=/u/5644764907&pre_page={0}'

    start_ajax_url2 = 'https://weibo.com/p/aj/v6/mblog/mbloglist?ajwvr=6&domain=100406&is_all=1&page={0}&pagebar=1&pl_name=Pl_Official_MyProfileFeed__20&id=1004065644764907&script_uri=/u/5644764907&pre_page={0}'

    for i in range(12): # 微博共有12页

    home_url = self.parse_home_url(start_url.format(i + 1)) # 获取每一页的微博

    ajax_url1 = self.parse_home_url(start_ajax_url1.format(i + 1)) # ajax加载页面的微博

    ajax_url2 = self.parse_home_url(start_ajax_url2.format(i + 1)) # ajax第二页加载页面的微博

    all_url = home_url + ajax_url1 + ajax_url2

    for j in range(len(all_url)):

    print(all_url[j])

    path_name = "第{}条微博相关评论.txt".format(i * 45 + j + 1)

    all_count, comment_info_list = self.parse_comment_info(all_url[j])

    self.write_file(path_name, comment_info_list)

    for num in range(1, 10000):

    if num * 15 

    comment_url = all_url[j] + "&page={}".format(num + 1)

    print(comment_url)

    try:

    count, comment_info_list = self.parse_comment_info(comment_url)

    self.write_file(path_name, comment_info_list)

    except Exception as e:

    print("Error:", e)

    time.sleep(60)

    count, comment_info_list = self.parse_comment_info(comment_url)

    self.write_file(path_name, comment_info_list)

    del count

    time.sleep(0.2)

    print("第{}微博信息获取完成!".format(i * 45 + j + 1))

    if __name__ == '__main__':

    weibo = Weibospider()

    weibo.run()

    上述内容就是利用python实现爬取微博评论的方法,你们学到知识或技能了吗?如果还想学到更多技能或者丰富自己的知识储备,欢迎关注亿速云行业资讯频道。

    展开全文
  • Python批量爬取微博内容(账号密码登陆):信息提取,Xpath定位,Selenium+Xpath定位内容,extree解析数据。
  • 可以批量爬取指定微博评论

    首先是单条评论数据。
    观察到用户名和id是在同一节点,如

    ‘<a_href="/u/3173923450?gid=10001">兵卒在江湖</a’

    然后依次确定评论内容和时间的元素节点。
    之后获取本页的所有评论数据。
    翻页操作是对网址中rl的值进行自增,0和1都是第一页。

    根据上述分析,使用m.weibo.cn的接口,即可实现:

    #coding='utf-8'
    import xlrd
    import re
    import requests
    import xlwt
    import os
    import time as t
    import random
    import numpy as np	
    import datetime
    import urllib3
    from multiprocessing.dummy import Pool as ThreadPool
    
    urllib3.disable_warnings()
    cookie=''
    
    headers = {
    				  'Accept-Encoding': 'gzip, deflate, sdch',
    				 'Accept-Language': 'en-US,en;q=0.8',
    				 'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.95 Safari/537.36',
    				'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8',
    				 'Referer': 'https://www.baidu.com/',
    			    'Connection': 'keep-alive',
    				'Cookie': cookie,
    				}
    
    def require(url):
    	"""获取网页源码"""
    	while True:
    		try:
    			response = requests.get(url, headers=headers,timeout=(30,50),verify=False)
    			#print(url)
    			code_1=response.status_code
    			#print(type(code_1))
    			#t.sleep(random.randint(1,2))
    			if code_1==200:
    				print('正常爬取中,状态码:'+str(code_1))#状态码
    				t.sleep(random.randint(1,2))
    				break
    			else:
    				print('请求异常,重试中,状态码为:'+str(code_1))#状态码
    				t.sleep(random.randint(2,3))
    				continue
    		except:
    			t.sleep(random.randint(2,3))
    			continue
    
    	#print(response.encoding)#首选编码
    	#response.encoding=response.apparent_encoding
    	html=response.text#源代码文本
    	return html
    
    def html_1(url):#返回网页源码和评论页数
    	html=require(url)
    	try:
    		page=re.findall('&nbsp;1/(.*?)页',html,re.S)
    		page=int(page[0])
    	except:
    		page=0
    	#page=re.findall('<input name="mp" type="hidden" value="(.*?)">',html,re.S)
    	return html,page
    
    def count(alls):
    	n=0
    	for all in alls:
    		for i in all:
    			n=n+1
    	return n
    
    
    def body(h_1):#主体
    	html_2=re.findall('<div class="c" id="C.*?">(.*?)</div>',str(h_1),re.S)
    	html_2=str(html_2)
    	
    	user_ids=re.findall('<a href=".*?&amp;fuid=(.*?)&amp;.*?">举报</a> ',html_2,re.S)#从举报链接入手
    	
    	names_0=re.findall('<a href=.*?>(.*?)</a>',html_2,re.S)
    	names=[]#用户名
    	ma=[ '举报', '赞[]', '回复']
    	pattern = re.compile(r'\d+')#匹配数字
    	for i in names_0:
    		i=re.sub(pattern, "", i)
    		if i not in ma:
    			if '@' not in i:
    				names.append(i)
    
    	pattern_0= re.compile(r'回复<a href=.*?</a>:')#匹配回复前缀
    	pattern_0_1= re.compile(r'<a href=.*?</a>')#匹配回复内容后面的表情图片地址
    	pattern_0_2= re.compile(r'<img alt=.*?/>')#匹配回复内容的图片地址
    	contents=[]#评论内容
    	contents_2=[]#评论内容初步
    	contents_0=re.findall('<span class="ctt">(.*?)</span>',html_2,re.S)#一级
    	contents_1=re.findall('<a href=.*?>@.*?</a>(.*?)<a href=.*?>举报</a> ',html_2,re.S)#二级
    
    	for i in contents_0:
    		i=re.sub(pattern_0,'',i)
    		i=re.sub(pattern_0_1,'',i)
    		i=re.sub(pattern_0_2,'',i)
    		i=i.replace(':','')
    		i=i.strip()
    		contents_2.append(i)
    
    	for i in contents_1:
    		i=re.sub(pattern_0,'',i)
    		i=re.sub(pattern_0_1,'',i)
    		i=re.sub(pattern_0_2,'',i)
    		i=i.replace('</span>','')
    		i=i.replace('&nbsp;','')
    		i=i.replace(':','')
    		i=i.strip()
    		contents_2.append(i)
    
    	for i in contents_2:
    		i=re.sub('\s','',i)#去除空白
    		if len(i)==0:
    			pass
    		else:
    			contents.append(i)
    	times_0=re.findall('<span class="ct">(.*?)</span>',html_2,re.S)
    	times=[]#时间
    	pattern_1= re.compile(r'\d{2}月\d{2}日')#匹配日期
    	for i in times_0:
    		try:
    			t_1= re.match(pattern_1, i).group()
    		except:
    			a=datetime.datetime.now().strftime('%m%d')
    			t_1=a[:2]+'月'+a[2:]+'日'#改为当天
    		times.append(t_1)
    	
    	all=[]
    	for i in range(len(user_ids)):#这有问题
    		try:
    			al=[user_ids[i],names[i],contents[i],times[i]]
    		except:
    			j='空'
    			contents.append(j)
    			al=[user_ids[i],names[i],contents[i],times[i]]
    		all.append(al)
    	return all
    
    def save_afile(alls,filename):
        """保存在一个excel"""
        f=xlwt.Workbook()
        sheet1=f.add_sheet(u'sheet1',cell_overwrite_ok=True)
        sheet1.write(0,0,'用户ID')
        sheet1.write(0,1,'用户名')
        sheet1.write(0,2,'评论内容')
        sheet1.write(0,3,'时间')
        i=1
        for all in alls:
            for data in all:
                for j in range(len(data)):
                    sheet1.write(i,j,data[j])
                i=i+1
        f.save(r'今年/'+filename+'.xls')
    
    def extract(inpath,l):
        """取出一列数据"""
        data = xlrd.open_workbook(inpath, encoding_override='utf-8')
        table = data.sheets()[0]#选定表
        nrows = table.nrows#获取行号
        ncols = table.ncols#获取列号
        numbers=[]
        for i in range(1, nrows):#第0行为表头
            alldata = table.row_values(i)#循环输出excel表中每一行,即所有数据
            result = alldata[l]#取出表中第一列数据
            numbers.append(result)
        return numbers
    
    def run(ids):
    	b=ids[0]#bid
    	u=str(ids[1]).replace('.0','')#uid
    	alls=[]#每次循环就清空一次
    	pa=[]#空列表判定
    	url='https://weibo.cn/comment/'+str(b)+'?uid='+str(u)#一个微博的评论首页
    	html,page=html_1(url)
    	#print(url)
    	if page==0:#如果为0,即只有一页数据
    		#print('进入页数为0')
    		try:
    			data_1=body(html)
    		except:
    			data_1=pa
    		alls.append(data_1)#将首页爬取出来
    		#print('共计1页,共有'+str(count(alls))+'个数据')
    	else:#两页及以上
    		#print('进入两页及以上')
    		#print('页数为'+str(page))
    		for j in range(1,page+1):#从1到page
    			if j>=51:
    				break
    			else:
    				url_1=url+'&rl=1'+'&page='+str(j)
    				#print(url_1)
    				htmls,pages=html_1(url_1)
    				alls.append(body(htmls))
    			t.sleep(1)
    	print('共计'+str(page)+'页,共有'+str(count(alls))+'个数据')
    	save_afile(alls,b)
    
    	print('微博号为'+str(b)+'的评论数据文件、保存完毕')
    
    if __name__ == '__main__':
    	#由于微博限制,只能爬取前五十页的
    	#里面的文件是爬取到的正文文件
    	bid=extract('..//1.微博正文爬取//正文_2.xlsx',1)#1是bid,2是u_id
    	uid=extract('..//1.微博正文爬取//正文_2.xlsx',2)
    
    	ids=[]#将bid和uid匹配并以嵌套列表形式加入ids
    	for i,j in zip(bid,uid):
    		ids.append([i,j])
    	#多线程
    	pool = ThreadPool()
    	pool.map(run, ids)
    		
    		
    
    

    速度可以自定义,修改t.sleep的值即可。
    记得加入自己的cookie。
    输入url举例:
    https://weibo.cn/comment/JAwXz9QrW?uid=1974576991
    JAwXz9QrW是微博正文的bid
    1974576991就是发布博文的用户的id。
    遍历即可。可以利用多线程加快速度。

    除了这个爬虫,还有用户信息爬虫等基于微博平台的舆情分析程序,参见:

    https://github.com/stay-leave/weibo-public-opinion-analysis

    展开全文
  • 利用Python系统性爬取微博评论

    热门讨论 2021-03-26 14:12:45
    利用Python系统性爬取微博评论前言一、准备二、实现1.爬取用户微博2.爬取微博评论3.筛选存储评论4.整合评论数据总结 文章目录前言一、准备二、实现1.爬取用户微博2.爬取微博评论3.筛选存储评论4.整合评论数据总结 ...
  • [Python爬虫] Selenium爬取新浪微博客户端用户信息、热点话题及评论 (上) 主要爬取内容包括: 新浪微博手机端用户信息和微博信息。 用户信息:包括用户ID、用户名、微博数、粉丝数、关注数等。 微博信息:包括转发...
  • 【小盐巴学习笔记】—用Python批量爬取微博评论前言一、爬虫分析1.分析网址2.分析数据二、完整代码总结 前言 微博的网页规律会比普通的网页复杂一丢丢 一、爬虫分析 首先看看今天要爬取的网址 ...
  • ​ 写了一个简单的Python爬取指定用户微博的内容和图片,目前比较简陋,之前有在github上参考别人写的爬虫,发现现在微博好像使用的是Ajax的方式来渲染数据,这也太方便了,直接请求接口,然后解析数据不就能得到...
  • 主要介绍了Python selenium爬取微博数据代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
  • 前言 一年一度的虐狗节终于过去了,朋友圈各种晒,晒自拍,晒娃,晒美食,秀恩爱的。程序员在晒什么,程序员...requests 用于网络请求爬取微博数据,结巴分词进行中文分词处理,词云处理库 wordcloud,图片处理库 Pillo

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 7,170
精华内容 2,868
关键字:

python爬取微博评论