python爬虫爬取微博评论--完整版(超详细,大学生不骗大学生)

目录

一、找到页面

 二、学会使用检查元素

2.1 打开检查元素界面

2.2 找到所有评论所在的位置

2.2.1 搜索评论

2.2.2  找到data表

三、基础部分代码实现 

 四、格式化输出

4.1 了解存储格式

4.2 单独取出内容

4.3 取出所有评论内容

4.4 格式化读取信息

五、导出成表格形式

六、了解分页

6.1 查看分页

6.2 寻找分页的规律

七、多页实现 

八、完整代码

九、大多数报错原因


一、找到页面

首先你需要找到一个你想要爬取的页面

(这里我是随机找的一个微博帖子)

它的评论内容是这样的

然后我们今天的内容就是从这个页面的评论里面提取我们想要的

(其实学会了之后不只可以爬取评论的内容喔!!)

 二、学会使用检查元素

2.1 打开检查元素界面

在你打开的页面->单机右键->检查元素(或者是审查元素),然后我们就可以看到这个界面

这里你的上面一行表头可能会是英文嘟没关系(我会把英文界面该点的标在括号里)

我们主要用的是网络(network)这部分 

点击网络(network) 

如果点击小放大镜后界面和我这个差不多那就大概率是对的 

如果你没有这小放大镜可以换个浏览器

(我目前用下来,苹果自带的Safari浏览器是不行的,我用的这个例子里是360浏览器,是OK嘟,大家可以参考一下)

2.2 找到所有评论所在的位置

2.2.1 搜索评论

这里我们在搜索的界面输入我们这个帖子里面随便一条评论的内容,点击搜索 

如果你在这里黏贴了评论的内容但是,显示搜索不到结果你可以试一试

不关闭检查元素的界面->退出当前网页或者你随机点一个人的主页->再回到评论界面->搜索评论内容就会出现了!

2.2.2  找到data表

下一步我们 点击搜索出的结果

显示的界面是这样的

然后我们点击这个预览(preview)

再说一次喔,有可能大家的检查元素打开的是全英文的,但是没关系我会把英文该点的标在括号里

(后面的大部分操作都是在这个预览界面的) 

点击data旁边的小三角,展开data

展现的结果是这样的 

然后这个里面的0-19,就是0-19条评论的数据,包括一些评论内容,评论人的ID,评论被点赞的数量等等,我们一会要爬取的数据就是从这里来的

三、基础部分代码实现 

首先我们要知道想要爬取一个网站的数据我们首先需要访问网站

我们的代码需要通过网站的url来找到网站

下面我们先将爬取网站的基础格式写出来

#requets是一个爬虫的第三方库,需要单独安装
import requests

#url是一访问网站的地址(这个不是很了解,但是我们代码是需要通过url来找到你要爬取的网页)
url = ''

#1.发送请求(定义一个response变量用来存储从url所对应的网页得到的信息)
response = requests.get(url=url)

#2.打印请求状态(response有很多属性,比如text等等,但是直接打印response是打印当前请求的状态码,200是成功,404是错误)
print(response)

从上面的几行代码我们就能实现对网站的访问,但是,我们该怎么获取一个网站的url呢?

找到我们有data列表的那个检查元素界面->点击标头(headers)

在这里可以看到一个 “请求网址” (URL),这个就是我们的请求头

将这个URL复制到我们代码里面

#requets是一个爬虫的第三方库,需要单独安装
import requests

#url是一访问网站的地址
url = 'https://weibo.com/ajax/statuses/buildComments?is_reload=1&id=5017675820436181&is_show_bulletin=2&is_mix=0&count=10&uid=2810373291&fetch_level=0&locale=zh-CN'

#1.发送请求
response = requests.get(url=url)

#2.打印请求状态
print(response)

这里我用PyCharm运行一下代码

可以看到输出显示 <Response [200]>,代表着我们访问成功了

下一步我们可以试着把网页的数据用 .text的方式拿出来 

#requets是一个爬虫的第三方库,需要单独安装
import requests

#url是一访问网站的地址
url = 'https://weibo.com/ajax/statuses/buildComments?is_reload=1&id=5017675820436181&is_show_bulletin=2&is_mix=0&count=10&uid=2810373291&fetch_level=0&locale=zh-CN'

#1.发送请求
response = requests.get(url=url)

#2.打印网页数据
print(response.text)

我们运行一下

 但是我们发现这个并不是像我们想的一样,将网页的文本用文字的方式呈现,那么接下来我们要用到一个方法,让我们能够用文字的方式输出网页数据----->定义请求头

import requests

# 请求头
headers = {
    # 用户身份信息
    'cookie' : '',
    # 防盗链
    'referer' : '',
    # 浏览器基本信息
    'user-agent' : ''
}

url = 'https://weibo.com/ajax/statuses/buildComments?is_reload=1&id=5017675820436181&is_show_bulletin=2&is_mix=0&count=10&uid=2810373291'
# 1.发送请求
response = requests.get(url=url,headers=headers)

#2.打印网页数据
print(response.text)

为什么要定义请求头,因为从网站的设置初衷,它是不想服务于我们的爬虫程序的,网站正常只想服务于客户的访问服务,那么我们要将我们的爬虫程序伪装成为正常的服务。

此时我们需要定义一些数据来伪装,通常我们只需要设置 cookie 、referee、user-agent就够了(如果有些特殊的网站可能需要我们有其他的参数) 

那么我们cookie这些数据从哪里来呢,我们回到网站的那个请求头(headers)的检查元素界面 

在这个界面向下划动,找到 cookie 、referer 、user-agent 

我们将 cookie 、referer 、user-agent 的数据分别粘贴在代码里面

import requests

# 请求头
headers = {
    # 用户身份信息
    'cookie' : 'XSRF-TOKEN=KVMLznKAi1u5t7UavCDVyD0I; _s_tentry=weibo.com; Apache=3869338173200.8403.1711845564842; SINAGLOBAL=3869338173200.8403.1711845564842; ULV=1711845565244:1:1:1:3869338173200.8403.1711845564842:; PC_TOKEN=dcbe0bd978; SUB=_2A25LDMCxDeRhGeFJ71sS8CvLzTmIHXVoYFx5rDV8PUNbmtB-LVD9kW9Nf6JZvhCZ3PGanwgbD1yc6zGrHhnf6wrq; SUBP=0033WrSXqPxfM725Ws9jqgMF55529P9D9W586R5s7_p1VykF21DkOu3L5JpX5o275NHD95QNS0B4e05fS0qfWs4DqcjAMJv09CH8SE-4BC-RSFH8SCHFxb-ReEH8SFHFBC-RBbH8Sb-4SEHWSCH81FHWxCHFeFH8Sb-4BEHWB7tt; ALF=1712450401; SSOLoginState=1711845601; WBPSESS=7dB0l9FjbY-Rzc9u1r7G0AeIukWsnj2u9VSmMssaP8z8nNdVQm3MrakDKiijTO3Y_iL6pEDJ8mgGw5Ql6jIh-aVUQoUZdu9LfLYmAiNsLqi43OBU2ZJdNYv4zIWorgKZiAz8JGn2kAugZwnStCVYKw==',
    # 防盗链
    'referer' : 'https://weibo.com/2810373291/O7pPo1Ptb',
    # 浏览器基本信息
    'user-agent' : 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/108.0.5359.95 Safari/537.36'
}
url = 'https://weibo.com/ajax/statuses/buildComments?is_reload=1&id=5017675820436181&is_show_bulletin=2&is_mix=0&count=10&uid=2810373291'
# 1.发送请求
response = requests.get(url=url,headers=headers)

#2.打印网页数据
print(response.text)

运行一下 

 在这里可以看到,我们已经拿到文字式的数据,但是数据过于多和复杂,没办法很好的现实提取评论内容

 四、格式化输出

那么接下来,我们想要将这些数据更加规整的输出

4.1 了解存储格式

1.那么我们首先要观察这些数据的存储方式

打开网页 -> 单击右键 -> 审查元素 -> 搜索一条评论 -> 点击预览(preview) -> 点击data旁边的小箭头 -> 点击 0 旁边的小箭头

那么在这林我们可以看到这里存有很多关于评论的数据,例如text_raw是评论的文本内容,source是发表评论人的ip来源地,id是发表评论人的id等等等

4.2 单独取出内容

那么我们先将第一个评论的text_raw用代码取出来试一下

import requests
# 请求头
headers = {
    # 用户身份信息
    'cookie' : 'XSRF-TOKEN=KVMLznKAi1u5t7UavCDVyD0I; _s_tentry=weibo.com; Apache=3869338173200.8403.1711845564842; SINAGLOBAL=3869338173200.8403.1711845564842; ULV=1711845565244:1:1:1:3869338173200.8403.1711845564842:; PC_TOKEN=dcbe0bd978; SUB=_2A25LDMCxDeRhGeFJ71sS8CvLzTmIHXVoYFx5rDV8PUNbmtB-LVD9kW9Nf6JZvhCZ3PGanwgbD1yc6zGrHhnf6wrq; SUBP=0033WrSXqPxfM725Ws9jqgMF55529P9D9W586R5s7_p1VykF21DkOu3L5JpX5o275NHD95QNS0B4e05fS0qfWs4DqcjAMJv09CH8SE-4BC-RSFH8SCHFxb-ReEH8SFHFBC-RBbH8Sb-4SEHWSCH81FHWxCHFeFH8Sb-4BEHWB7tt; ALF=1712450401; SSOLoginState=1711845601; WBPSESS=7dB0l9FjbY-Rzc9u1r7G0AeIukWsnj2u9VSmMssaP8z8nNdVQm3MrakDKiijTO3Y_iL6pEDJ8mgGw5Ql6jIh-aVUQoUZdu9LfLYmAiNsLqi43OBU2ZJdNYv4zIWorgKZiAz8JGn2kAugZwnStCVYKw==',
    # 防盗链
    'referer' : 'https://weibo.com/2810373291/O7pPo1Ptb',
    # 浏览器基本信息
    'user-agent' : 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/108.0.5359.95 Safari/537.36'
}
url = 'https://weibo.com/ajax/statuses/buildComments?is_reload=1&id=5017675820436181&is_show_bulletin=2&is_mix=0&count=10&uid=2810373291'
# 1.发送请求
response = requests.get(url=url,headers=headers)
#2.打印网页数据
# .text:获取文本数据
# .json():json字符串数据
# .content:获取二进制数据
# 这里如果我们想要单独取出数据,我们需要用json格式,它是一个格式化的数据
# 用json格式获取数据后我们要找到第一条评论的内容
# 我们把preview界面看作一个文件夹,那么我们首先打开的是 data ,然后是 0 ,然后是 text_raw
# 这里注意 data、text_raw 是字符串要加单引号,但是 0 是整数不用单引号
# 最后用类似于数组的方式访问
print(response.json()['data'][0]['text_raw'])

运行一下

可以看到我们顺利取到了第一条评论的内容

4.3 取出所有评论内容

接下来我们将所有的评论内容都取出来,但是我们也不能一条一条写01234,所以,这里我们会用到循环

import requests
# 请求头
headers = {
    # 用户身份信息
    'cookie' : 'XSRF-TOKEN=KVMLznKAi1u5t7UavCDVyD0I; _s_tentry=weibo.com; Apache=3869338173200.8403.1711845564842; SINAGLOBAL=3869338173200.8403.1711845564842; ULV=1711845565244:1:1:1:3869338173200.8403.1711845564842:; PC_TOKEN=dcbe0bd978; SUB=_2A25LDMCxDeRhGeFJ71sS8CvLzTmIHXVoYFx5rDV8PUNbmtB-LVD9kW9Nf6JZvhCZ3PGanwgbD1yc6zGrHhnf6wrq; SUBP=0033WrSXqPxfM725Ws9jqgMF55529P9D9W586R5s7_p1VykF21DkOu3L5JpX5o275NHD95QNS0B4e05fS0qfWs4DqcjAMJv09CH8SE-4BC-RSFH8SCHFxb-ReEH8SFHFBC-RBbH8Sb-4SEHWSCH81FHWxCHFeFH8Sb-4BEHWB7tt; ALF=1712450401; SSOLoginState=1711845601; WBPSESS=7dB0l9FjbY-Rzc9u1r7G0AeIukWsnj2u9VSmMssaP8z8nNdVQm3MrakDKiijTO3Y_iL6pEDJ8mgGw5Ql6jIh-aVUQoUZdu9LfLYmAiNsLqi43OBU2ZJdNYv4zIWorgKZiAz8JGn2kAugZwnStCVYKw==',
    # 防盗链
    'referer' : 'https://weibo.com/2810373291/O7pPo1Ptb',
    # 浏览器基本信息
    'user-agent' : 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/108.0.5359.95 Safari/537.36'
}
url = 'https://weibo.com/ajax/statuses/buildComments?is_reload=1&id=5017675820436181&is_show_bulletin=2&is_mix=0&count=10&uid=2810373291'
# 1.发送请求
response = requests.get(url=url,headers=headers)
# 2.打印网页数据
# 定义一个json_data来存储 response.json()的数据
json_data = response.json()
# 定义一个data_list取出所有data中的数据
data_list = json_data['data']
# 定义一个data数据,让它便利data_list里面的对象
# 这里怎么理解呢,data_list看作一个数组,我让data等于数组的第一个数
# 然后执行操作,执行完之后返回for,我们再另data等于数组的第二个数执行操作
# 循环往复
for data in data_list:
    # 这里 data 代表着 data_list的第一个数也就是 ['data'][0]
    text_raw = data['text_raw']
    print(text_raw)

运行一下

4.4 格式化读取信息

可以看到我们已经取出了所有的评论,那么可能大家还需要爬取这个评论的其他数据,例如发评论人的id,昵称和该条评论的点赞数量

import requests
# 请求头
headers = {
    # 用户身份信息
    'cookie' : 'XSRF-TOKEN=KVMLznKAi1u5t7UavCDVyD0I; _s_tentry=weibo.com; Apache=3869338173200.8403.1711845564842; SINAGLOBAL=3869338173200.8403.1711845564842; ULV=1711845565244:1:1:1:3869338173200.8403.1711845564842:; PC_TOKEN=dcbe0bd978; SUB=_2A25LDMCxDeRhGeFJ71sS8CvLzTmIHXVoYFx5rDV8PUNbmtB-LVD9kW9Nf6JZvhCZ3PGanwgbD1yc6zGrHhnf6wrq; SUBP=0033WrSXqPxfM725Ws9jqgMF55529P9D9W586R5s7_p1VykF21DkOu3L5JpX5o275NHD95QNS0B4e05fS0qfWs4DqcjAMJv09CH8SE-4BC-RSFH8SCHFxb-ReEH8SFHFBC-RBbH8Sb-4SEHWSCH81FHWxCHFeFH8Sb-4BEHWB7tt; ALF=1712450401; SSOLoginState=1711845601; WBPSESS=7dB0l9FjbY-Rzc9u1r7G0AeIukWsnj2u9VSmMssaP8z8nNdVQm3MrakDKiijTO3Y_iL6pEDJ8mgGw5Ql6jIh-aVUQoUZdu9LfLYmAiNsLqi43OBU2ZJdNYv4zIWorgKZiAz8JGn2kAugZwnStCVYKw==',
    # 防盗链
    'referer' : 'https://weibo.com/2810373291/O7pPo1Ptb',
    # 浏览器基本信息
    'user-agent' : 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/108.0.5359.95 Safari/537.36'
}
url = 'https://weibo.com/ajax/statuses/buildComments?is_reload=1&id=5017675820436181&is_show_bulletin=2&is_mix=0&count=10&uid=2810373291'
# 1.发送请求
response = requests.get(url=url,headers=headers)
# 2.打印网页数据
json_data = response.json()
data_list = json_data['data']

for data in data_list:
    text_raw = data['text_raw']
    id = data['id'] # 发表评论人的id
    created_at = data['created_at'] # 评论发表在什么时候
    like_counts = data['like_counts'] # 该评论的点赞数量
    total_number = data['total_number'] # 该条评论被别人回复的数量
    screen_name = data['user']['screen_name'] # 发表评论人的昵称
    print(id,screen_name,text_raw,like_counts,total_number,created_at)

运行一下

可以看现在的输出数据已经很规整了

五、导出成表格形式

我们将输出的数据导出成表格形式,更加方便我们观察与使用

import requests
import csv

f = open('评论.csv',mode='a',encoding='utf-8-sig',newline='')
csv_write = csv.writer((f))
csv_write.writerow(['id','screen_name','text_raw','like_counts','total_number','created_at'])
# 请求头
headers = {
    # 用户身份信息
    'cookie' : 'XSRF-TOKEN=KVMLznKAi1u5t7UavCDVyD0I; _s_tentry=weibo.com; Apache=3869338173200.8403.1711845564842; SINAGLOBAL=3869338173200.8403.1711845564842; ULV=1711845565244:1:1:1:3869338173200.8403.1711845564842:; PC_TOKEN=dcbe0bd978; SUB=_2A25LDMCxDeRhGeFJ71sS8CvLzTmIHXVoYFx5rDV8PUNbmtB-LVD9kW9Nf6JZvhCZ3PGanwgbD1yc6zGrHhnf6wrq; SUBP=0033WrSXqPxfM725Ws9jqgMF55529P9D9W586R5s7_p1VykF21DkOu3L5JpX5o275NHD95QNS0B4e05fS0qfWs4DqcjAMJv09CH8SE-4BC-RSFH8SCHFxb-ReEH8SFHFBC-RBbH8Sb-4SEHWSCH81FHWxCHFeFH8Sb-4BEHWB7tt; ALF=1712450401; SSOLoginState=1711845601; WBPSESS=7dB0l9FjbY-Rzc9u1r7G0AeIukWsnj2u9VSmMssaP8z8nNdVQm3MrakDKiijTO3Y_iL6pEDJ8mgGw5Ql6jIh-aVUQoUZdu9LfLYmAiNsLqi43OBU2ZJdNYv4zIWorgKZiAz8JGn2kAugZwnStCVYKw==',
    # 防盗链
    'referer' : 'https://weibo.com/2810373291/O7pPo1Ptb',
    # 浏览器基本信息
    'user-agent' : 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/108.0.5359.95 Safari/537.36'
}
url = 'https://weibo.com/ajax/statuses/buildComments?is_reload=1&id=5017675820436181&is_show_bulletin=2&is_mix=0&count=10&uid=2810373291'
# 1.发送请求
response = requests.get(url=url,headers=headers)
# 2.获取数据

# 3.提取数据
json_data = response.json()
data_list = json_data['data']

for data in data_list:
    text_raw = data['text_raw']
    id = data['id']
    created_at = data['created_at']
    like_counts = data['like_counts']
    total_number = data['total_number']
    screen_name = data['user']['screen_name']
    print(id,screen_name,text_raw,like_counts,total_number,created_at)
    # 4.保存数据
     csv_write.writerow([id,screen_name,text_raw,like_counts,total_number,created_at])

运行一下

我们可以看到,有一个格式是 .csv 的文件生成了,我们可以在访问中打开它

打开表格

太棒啦能看到这里!!!!!!!(加油加油加油)

六、了解分页

6.1 查看分页

这里为了方便演示多页的评论,我寻找了一个评论在两千条左右的帖子

找到页面 -> 单机右键 -> 检查元素(审查元素) -> 点击网络(network) -> 点击小的放大镜(搜索)-> 复制一条评论 -> 进行搜索 -> 点击标头(headers) 

PS:之前的文章里有详细的一步一步的操作演示,如果有遇到问题的可以去看一下

 我们能看到这个界面,这是你复制的那条评论所对应的分页的一个URL

在这里我们可以看到这个“buildComments”,这是对应的整篇帖子的评论的包,我们复制这一小部分

注意不要复制多了真正需要复制的其实只有buildComments,也可以自己打,但是为了避免手打出现错误我是比较推荐复制

将这一小部分粘贴至过滤(filter) -> 回车

此时我们会看到,立即出现一个分页的搜索结果

然后不关闭检查元素的界面 -> 我们将鼠标移到帖子的部分,向下划动贴子中的评论,此时我们会发现,随着我们不断向下划动,会逐渐出现更多的搜索结果

6.2 寻找分页的规律

首先我们观察一下第一个分页的URL

点击第一个搜索的结果(就是名称下面的那四行,我们先点击第一行)

在这里我们可以看到第一个页面的URL是这样的

然后我们查看第二个页面的URL

我们观察一下这两个URL的区别

我们发现绿色框住的是第一个分页的,它是“count=10”没有max_id,二粉色框住的URL是有max_id的,不知道大家之前有没有印象,在我们预览(preview)界面中,我们是见到过max_id的,所以我们观察一下第一个分页的max_id

打开第一个分页的预览(preview)界面

我们发现第一个分页的max_id和第二个分页URL中的max_id是完全一样的,我们可以多观察几组(例如第二个分页的max_id和第三个分页URL中的max_id)

然后我们就发现了不同分页之间的规律

七、多页实现 

在前面的代码中我们已经实现了单页的评论爬取,在这里我们是需要对URL进行修改就可

(下面演示的代码是不完全,只写出来新加的代码)

headers = {
    # 之前的headers的值
}
# 定义一个get_next宏函数,在函数立里面定一个next变量,它的初值是 count=10
def get_next(next='count=10’):
# 然后我们把URL这里的 count=10 替换成 next 变量的值
    url = f'https://weibo.com/ajax/statuses/buildComments?is_reload=1&id=5003170104741808&is_show_bulletin=2&is_mix=0&{next}&uid=7190522839&fetch_level=0&locale=zh-CN’

    response = requests.get(url=url,headers=headers)
    json_data = response.json()

    data_list = json_data['data']
    max_id = json_data['max_id’]  # 这里是单独获取这个分页的max_id
    
    #这里是正常的格式化获取数据代码,为了方便观察新代码的结构我没写上

    # 这里把单纯的 max_id 的数字加上 max_id=
    max_str = 'max_id='+str(max_id)
    # 调用get_next,且更行next的值
    get_next(max_str)
# 调用方法
get_next()

八、完整代码

我们把之前的代码加上

import requests
import csv

f = open('评论.csv',mode='a',encoding='utf-8-sig',newline='')
csv_write = csv.writer(f)
csv_write.writerow(['id','screen_name','text_raw','like_counts','total_number','created_at'])
# 请求头
headers = {
        # 用户身份信息
        'cookie': 'SINAGLOBAL=3869338173200.8403.1711845564842; SUB=_2A25LDMCxDeRhGeFJ71sS8CvLzTmIHXVoYFx5rDV8PUNbmtB-LVD9kW9Nf6JZvhCZ3PGanwgbD1yc6zGrHhnf6wrq; SUBP=0033WrSXqPxfM725Ws9jqgMF55529P9D9W586R5s7_p1VykF21DkOu3L5JpX5o275NHD95QNS0B4e05fS0qfWs4DqcjAMJv09CH8SE-4BC-RSFH8SCHFxb-ReEH8SFHFBC-RBbH8Sb-4SEHWSCH81FHWxCHFeFH8Sb-4BEHWB7tt; ALF=1712450401; ULV=1711898034864:2:2:2:7503967975067.276.1711898034641:1711845565244; XSRF-TOKEN=aCKBvTY69V5X8kKbW1jSLjdj; WBPSESS=7dB0l9FjbY-Rzc9u1r7G0AeIukWsnj2u9VSmMssaP8z8nNdVQm3MrakDKiijTO3Y_iL6pEDJ8mgGw5Ql6jIh-fzvfDRMIeuWHMU2fJkIgYlwx20EQfKsyJ2pPS9worRswHbmrN7qQifEsHMJ5esrgA==',
        # 防盗链
        'referer': 'https://weibo.com/7190522839/O1kt4jTyM',
        # 浏览器基本信息
        'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/108.0.5359.95 Safari/537.36'
    }


def get_next( next = 'count=10'):
    url = f'https://weibo.com/ajax/statuses/buildComments?is_reload=1&id=5003170104741808&is_show_bulletin=2&is_mix=0&{next}&uid=7190522839&fetch_level=0&locale=zh-CN'

    response = requests.get(url=url,headers=headers)
    json_data = response.json()

    data_list = json_data['data']
    max_id = json_data['max_id']
    for data in data_list:
        text_raw = data['text_raw']
        id = data['id']
        created_at = data['created_at']
        like_counts = data['like_counts']
        total_number = data['total_number']
        screen_name = data['user']['screen_name']
        print(id,screen_name,text_raw,like_counts,total_number,created_at)

        csv_write.writerow([id,screen_name,text_raw,like_counts,total_number,created_at])

    max_str = 'max_id='+str(max_id)
    get_next(max_str)
get_next()

但是我每次爬的话最多是爬五百条左右,就感觉进度不怎么动了

到这第一步就彻底成功喽!!!!!!

打开生成的表格之前的文章里面有!

九、大多数报错原因

我的电脑是苹果的,它的user-agent可能和大家的电脑不一样,如果报json或者data的错误,可以尝试:

referer是网址,你打开网址检查元素,看一下url和cookie还有user-agent是不是一样的,然后修改一下,再看看能不能运行

有任何问题或者写的有错误,都可以在评论区和我说,虽然我不一定会,因为我也是刚入门!!


就是之前这篇文章是分上中下写的,后面怕大家感觉麻烦我就把上中下合成一个了

欢迎大家给我指出错误或者和我交流!!!!!!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/703186.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【ARM Cache 与 MMU 系列文章 7.4 -- ARMv8 MMU 配置 寄存器使用介绍】

请阅读【ARM Cache 及 MMU/MPU 系列文章专栏导读】 及【嵌入式开发学习必备专栏】 文章目录 MMU 转换控制寄存器 TCR_ELxTCR_ELx 概览TCR_ELx 寄存器字段详解TCR 使用示例Normal MemoryCacheableShareability MMU 内存属性寄存器 MAIR_ELxMAIR_ELx 寄存器结构内存属性字段Devic…

两种典型的嵌入式系统架构模式

大多数嵌入式系统都具备实时特征&#xff0c;那么&#xff0c;这种嵌入式系统的典型架构可概括为两种模式&#xff0c;即层次化模式架构和递归模式架构。 1.层次化模式架构 为了达到概念一致性&#xff0c;许多系统通过层次化的方法进行搭建。这样做的结果是&#xff1a;位于高…

【漏洞复现】海洋CMS /js/player/dmplayer/dmku/ SQL注入漏洞复现(CVE-2024-29275)

0x01 产品简介 海洋CMS是一套专为不同需求的站长而设计的内容管理系统&#xff0c;灵活、方便、人性化设计、内容的专业网站。海洋CMS基于PHPMySql技术开发&#xff0c;完全开源免费、无任何加密代码。简单易用是最大的特色&#xff0c;可快速建立一个海量 0x02 漏洞概述 海…

翻译: Gen AI生成式人工智能学习资源路线图一

Introduction 介绍 本文档旨在作为学习现代人工智能系统背后的关键概念的手册。考虑到人工智能最近的发展速度&#xff0c;确实没有一个好的教科书式的资源来快速了解 LLMs 或其他生成模型的最新和最伟大的创新&#xff0c;但互联网上有大量关于这些主题的优秀解释资源&#x…

.NET周刊【6月第2期 2024-06-09】

国内文章 C#开源实用的工具类库&#xff0c;集成超过1000多种扩展方法 https://www.cnblogs.com/Can-daydayup/p/18230586 文章介绍了一个免费的C#工具类库Z.ExtensionMethods&#xff0c;可以通过NuGet包管理器轻松集成。该库支持.NET Standard 2.0和.NET Framework 4.0&am…

make和Cmake都有什么区别?(内附使用详解)

Make和Cmake make和Cmake的区别&#xff1a; 角色和功能: make: 是一个构建工具&#xff0c;它的任务是读取 Makefile 文件&#xff0c;并基于这些文件中的指令执行具体的构建操作。Makefile 文件包含了如何构建项目的规则&#xff0c;make 负责解析这些规则并执行必要的命令来…

webshell获取总结(cms获取方法、非cms获取方法、中间件拿Webshell方法)

目录 前期准备&#xff1a; 1、cookices靶场网站搭建&#xff1a; 2、dedecms靶场环境搭建&#xff1a; 获取Webshell方法总结&#xff1a; 一、CMS获取Webshell方法 二、非CMS获取Webshell方法 1、数据库备份获取Webshell 例如&#xff1a; 2、抓包上传获取Webshell 3、…

什么是APS计划排程? 企业产能与效率提升的智能引擎

快节奏和愈发激烈的现代工业环境中&#xff0c;如何提升生产效率、降低生产成本、最大化的满足订单交期、实现企业的降本增效&#xff0c;已成为众多企业关注的焦点。而APS系统——作为高级生产计划和调度系统的代表&#xff0c;正以其卓越的生产过程实时监控、产品加工过程优化…

[CAN] 创建解析CAN报文DBC文件教程

&#x1f449;本教程需要先安装CANdb软件&#xff0c;[CAN] DBC数据库编辑器的下载与安装 &#x1f64b;前言 DBC(全称为Database CAN)&#xff0c;是用于描述单个CAN网络中各逻辑节点的信息。 DBC是汽车ECU&#xff08;Electronic Control Unit&#xff0c;电子控制单元&…

Java面试八股之构造方法有哪些特性

构造方法有哪些特性 方法名与类名相同&#xff1a;构造方法的名称必须与它所在的类名称完全相同&#xff0c;包括大小写。 无返回类型&#xff1a;构造方法没有返回类型声明&#xff0c;连void也不需要。虽然没有明确的返回类型&#xff0c;但它隐式地返回了新创建的实例的引…

基于Java的诊所医院管理系统,springboot+html,MySQL数据库,用户+医生+管理员三种身份,完美运行,有一万一千字论文

演示视频 基本介绍 基于Java的诊所医院管理系统&#xff0c;springboothtml&#xff0c;MySQL数据库&#xff0c;用户医生管理员三种身份&#xff0c;完美运行&#xff0c;有一万一千字论文。 用户&#xff1a;个人信息管理、预约医生、查看病例、查看公告、充值、支付费用...…

后端开发面经系列 -- 小鹏汽车一面面经

小鹏汽车一面面经 公众号&#xff1a;阿Q技术站 来源&#xff1a;职言详情页 (maimai.cn) 文章目录 小鹏汽车一面面经1、String类型为什么不可变&#xff1f;1. 安全性2. 缓存和性能优化3. 哈希码缓存4. 类设计和接口5. 简单性和可读性 2、在浏览器中输入url地址到显示主页的过…

一文搞懂flex布局

上学读书的时候&#xff0c;学习flex布局&#xff0c;更多停留在理论知识层面。近来&#xff0c;经过工作实践&#xff0c;发现自己对flex布局的理解更加深入&#xff0c;运用起来更加熟练&#xff0c;也越发能感受到flex布局的强大灵活性&#xff0c;特来总结一波。若有错误之…

Linux部署mysql8.0.28数据库

目录 1.基础准备 (1)首先去官网下载二进制安装包 (2)下载好之后上传至服务器 (3)禁用关闭selinux和防火墙 (4)挂载光盘搭建本地yum仓库 2.解压到指定目录 3.检查系统是否安装mariadb 4.安装MySQL数据库 (1)进入MySQL目录 看到‘完毕’就说面mysql已经安装成功了 4.初…

2024-6-12-IXI(mat)应用到SR的代码解读

数据集 Download and decompress data from the link 百度网盘 请输入提取码 Password: qrlt Transform .h5 format to .mat format "python convertH5tomat.py --data_dir XXX/T2Net/h5 论文:Task Transformer Network for Joint MRI Reconstruction and Super-Resoluti…

大数据概论总结

三次信息化浪潮 : 信息技术的支撑 : 存储设备容量不断增加 CPU的处理能力不断提高 网络带宽不断增加 数据产生方式的变革促成大数据时代的来临 运营式系统阶段用户原创内容感知式系统阶段 大数据发展历程 : 分为三个阶段 : 大数据的概念 : 1 . 数据量大 : 根据IDC作出…

量产导入 | Tessent Scan 和 ATPG

目标 Upon completion of this module, you should be able to: Use Tessent Scan to insert full scan. Write a scan-inserted netlist file. Write ATPG setup files. lnsert test logic. Create, configure, and balance scan chains. Edit a scan chain order file and …

PyCharm2018图文安装教程、附录软件下载

软件简介 PyCharm 2018是一款IDE集成开发环境&#xff0c;主要功能包括代码调试、语法高亮、智能提示、单元测试、版本控制等&#xff0c;支持Python 3.7&#xff0c;改进search everywhere功能等&#xff0c;可以让用户快速的开发程序。 软件下载 复制链接浏览器打开 https…

Java基础面试重点-1

0. 符号&#xff1a; *&#xff1a;记忆模糊&#xff0c;验证后特别标注的知识点。 &&#xff1a;容易忘记知识点。 *&#xff1a;重要的知识点。 1. 简述一下Java面向对象的基本特征&#xff08;四个&#xff09;&#xff0c;以及你自己的应用&#xff1f; 抽象&#…

GStreamer安装——Android

Android安装 支持所有从2.3.1Gingerbread开始的版本 先决条件 开发机器是您开发Android应用程序的地方&#xff0c;然后您将其部署在目标机器上&#xff0c;目标机器显然应该是Android设备。 开发机器可以是Linux、Mac OS X或Windows&#xff0c;并且需要安装&#xff1a; 最…