用python语言爬虫爬取微博评论--上--初步爬虫(超详细版,大学生不骗大学生)
但是我们发现这个并不是像我们想的一样,将网页的文本用文字的方式呈现,那么接下来我们要用到一个方法,让我们能够用文字的方式输出网页数据----->定义请求头。为什么要定义请求头,因为从网站的设置初衷,它是不想服务于我们的爬虫程序的,网站正常只想服务于客户的访问服务,那么我们要将我们的爬虫程序伪装成为正常的服务。
目录
三、基础部分代码实现
全部已经更完(下面两个链接是中和下)
https://blog.csdn.net/m0_68325382/article/details/137234661?spm=1001.2014.3001.5502
爬虫爬取微博评论--下--多页爬取(超详细教程,大学生不骗大学生)-CSDN博客
一、找到页面
首先你需要找到一个你想要爬取的页面
(这里我是随机找的一个微博帖子)
它的评论内容是这样的
然后我们今天的内容就是从这个页面的评论里面提取我们想要的
(其实学会了之后不只可以爬取评论的内容喔!!)
二、学会使用检查元素
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)
运行一下
在这里可以看到,我们已经拿到文字式的数据,但是数据过于多和复杂,没办法很好的现实提取评论内容
晚点再写累累累累累,有需要的大家可以先收藏,我会更新的,因为我自己是昨天就做完了,
但是要写的详细真的蛮累的!!!!
yes!!!!!我又回来更新了!!!
因为我们又有作业了,累死我!!!!!
OK!!!!咱们明天说怎么爬取连续几页的评论
因为其实它这个评论是分页的,我们一次是爬不完嘟明天说
更多推荐
所有评论(0)