python抓取状态码418 | 豆瓣小王子评论抓取 |评分总和

场景:爬取豆瓣评论,状态码为418(正确的状态码应为200)
在这里插入图片描述

Part 1 状态码418的解决方法
一、常见的HTTP状态码
HTTP状态码的英文为HTTP Status Code。
HTTP状态码共分为5种类型:
在这里插入图片描述
常见的HTTP状态码:
200 - 请求成功
301 - 资源(网页等)被永久转移到其它URL
404 - 请求的资源(网页等)不存在
500 - 内部服务器错误
(来源:https://www.runoob.com/http/http-status-codes.html)

二、状态码418
418的意思是:你爬取的网站有反爬虫机制,需要通过反爬机制去解决这个问题。 headers是解决requests请求反爬的方法之一,相当于我们进去这个网页的服务器本身,假装自己本身在爬取数据。

对反爬虫网页,可以设置一些headers信息,模拟成浏览器取访问网站 。

在谷歌浏览器中的需要爬取的网页页面上,右键——检查:
在这里插入图片描述
三、解决办法:在爬取代码中添加headers
在这里插入图片描述
成功!

Part 2:在网站设置有反爬机制的情况下如何抓取内容:
场景仍然是豆瓣小王子的评论,代码如下:

import requests	
url='https://book.douban.com/subject/1084336/comments/'
headers={'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.212 Safari/537.36'}
r=requests.get(url,headers=headers) ##通过get()方法,加上要抓取的网页地址,就可以获得一个response对象,为了解决反爬机制,我们加上了header
#r=requests.get('https://book.douban.com/subject/1084336/comments/')  这行代码是没有反爬机制的写法
	
from bs4 import BeautifulSoup  #导入BeautifulSoup库
soup=BeautifulSoup(r.text,'lxml') # 把之前get到的对象作为一个参数传入BeautifulSoup()函数,结果是生成了一个BeautifulSoup对象soup
pattern=soup.find_all('span','short') #然后通过find_all()方法寻找评论所在行,我们在源码中看到评论行的特征是标签span,属性内容是short。   find_all()方法返回的是一个列表。
for item in pattern:    #需要对列表进行遍历,输出每一个对象的string属性
    print(item.string)

运行结果:
在这里插入图片描述

一些其他的说明:
1、Requests库是Python的第三方库,是目前公认的爬取网页最好的库。
BeautifulSoup库:可以从HTML或XML文件中提取数据的Python库。

2、r的类型是response
在这里插入图片描述

3、r.text的类型是字符串。
在这里插入图片描述

text属性可以自动推测文本编码并进行解码。

4、如果不使用find_all()函数,而是使用find(),则只会找到第一个标签的内容。
输出结果如下:
在这里插入图片描述
爬取短评成功!

Part 3 :如何获取豆瓣评分总和
代码如下:

import requests	
import re   #导入re库
url='https://book.douban.com/subject/1084336/comments/'
headers={'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.212 Safari/537.36'}
r=requests.get(url,headers=headers)
#r=requests.get('https://book.douban.com/subject/1084336/comments/')  这行代码是没有反爬机制的写法
#上面的代码是为了解决反爬机制。	

'''这段是输出评论的代码
from bs4 import BeautifulSoup
soup=BeautifulSoup(r.text,'lxml')
pattern=soup.find_all('span','short')
for item in pattern:
    print(item.string)
'''

s=0
pattern_s=re.compile('<span class="user-stars allstar(.*)rating"')
#通过compile()方法把字符串编译成一个pattern实例
p=re.findall(pattern_s,r.text)
#再利用正则表达式模块中的findall()函数匹配源代码中的r.text模式,结果返回一个列表p
for star in p:  
    s+=int(star)  #然后计算评分总和,这里还要注意把字符串类型转换为int类型
print(s)  #输出总和

输出结果:
在这里插入图片描述

一些其他的说明:

1、re库:是python中处理正则表达式的标准库,主要用于字符串匹配。
2、源码中评分的标签形式为:

<span class="user-stars allstar50 rating" title="力荐"></span>

而我们使用compile方法时要写为这样:’<span class="user-stars allstar(.)rating"’
(.
):代表的是评分
3、BeautifulSoup中find_all()有下划线;
re库中的findall()没有下划线。
4、p是一个列表。
查看p的所有值输出如下:
在这里插入图片描述

  • 10
    点赞
  • 31
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 好的,您需要使用Python编写一个爬虫程序,从豆瓣网站上抓取评论信息。以下是一个简单的示例代码,可以帮助您开始编写: ```python import requests from bs4 import BeautifulSoup # 将目标网页的URL替换为您要抓取评论的电影或书籍页面 url = 'https://book.douban.com/subject/1084336/comments/' # 发送GET请求并获取网页HTML内容 response = requests.get(url) html = response.text # 使用BeautifulSoup解析HTML内容,并提取评论信息 soup = BeautifulSoup(html, 'html.parser') comments = soup.find_all('span', class_='short') for comment in comments: print(comment.text) ``` 您可以将上述代码中的URL替换为您要抓取评论的电影或书籍页面,然后运行程序即可抓取评论信息。请注意,豆瓣网站可能会有反爬虫机制,因此请合理使用爬虫,避免频繁抓取同一页面或大量抓取数据。 ### 回答2: Python爬虫抓取豆瓣评论是通过编写程序来自动化地从豆瓣网站上获取评论数据的过程。下面是一个简单的示例来说明如何使用Python爬虫抓取豆瓣评论。 首先,需要安装Python中的一个网络爬虫库,例如BeautifulSoup、Scrapy或Requests等。这些库可以帮助我们更轻松地处理网页和提取所需的数据。 接下来,我们需要确定要爬取的网页URL。在豆瓣上,每个电影都有一个唯一的URL,其中包含了影片的评论信息。 然后,通过发送HTTP请求来获取网页的源代码。在Python中,可以使用Requests库来发送GET请求,获取到的源代码可以保存在一个变量中。 一旦获取到网页的源代码,就可以使用BeautifulSoup库来解析HTML标签并提取所需的评论数据。通过分析网页的结构,找到评论内容所在的标签,然后使用BeautifulSoup的相关方法来提取评论文本。 最后,可以将提取出的评论数据保存到一个文件中,或者进行相应的数据分析和处理。 需要注意的是,爬取豆瓣评论数据可能涉及到网站的反爬措施,例如限制IP访问频率、验证码等。在进行爬取时,应该尊重网站的规则并避免对其造成过大的负担。 综上所述,Python爬虫可以实现对豆瓣评论抓取,并可以通过相关库来处理网页和提取所需数据。使用Python编写爬虫程序可以简化爬取过程,并可以将抓取到的评论数据用于后续的数据分析和处理。 ### 回答3: Python爬虫是一种自动化程序,可以通过网络爬取数据。豆瓣是一个流行的社交媒体平台,用户可以在其上发布评论评分。以下是关于用Python爬虫抓取豆瓣评论的说明。 首先,我们需要安装相关的Python库,如Requests和BeautifulSoup。这些库可以帮助我们发送HTTP请求并解析HTML页面。使用这些库可以通过URL获取网页的内容,并从HTML中提取所需的数据。 然后,我们需要找到豆瓣网页上评论的URL地址。在豆瓣电影页面上,评论URL一般在网页的源代码中可以找到。我们可以使用Requests库发送一个GET请求来获取评论页面的HTML内容。 接下来,通过解析HTML内容,我们可以找到评论所在的标签和类名。使用BeautifulSoup库可以帮助我们提取这些数据。我们可以使用find_all()函数来找到特定标签和类名的所有实例,并将评论文本提取出来。 最后,我们可以将提取的评论保存到本地或进行进一步的处理和分析。可以使用Python的文件写入功能将评论数据保存为文本文件。如果需要进行进一步的处理,还可以使用Python的数据处理和分析库,如Pandas和NumPy。 需要注意的是,使用Python爬虫进行数据抓取时,要遵守网站的使用规则。不得滥用爬虫或对网站进行过多的请求,以免给网站带来压力或造成不必要的困扰。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值