鱼C论坛

 找回密码
 立即注册
查看: 1347|回复: 11

[已解决]爬虫豆瓣top250

[复制链接]
发表于 2020-6-27 17:37:08 | 显示全部楼层 |阅读模式
20鱼币
小甲鱼视频里面,关于找出一共有多少页面,beautifulsoup的划红线部分没看明白
def find_depth(res):
    soup = BeautifulSoup(res.text,'html.parser')
    depth = soup.find('span', class_='next').previous_sibling.previous_sibling.text
    #a = str(re.findall(r'*',soup.a['href'])
    depth = int(depth)
    return depth    
最佳答案
2020-6-27 17:37:09
本帖最后由 suchocolate 于 2020-6-27 19:12 编辑

不知道网址,看不到网页代码,只从语法上看就是:
soup.find('span', class_='next').previous_sibling.previous_sibling.text
1)('span', class_='next'):找class为next的span节点
2)previous_sibling.previous_sibling:这个节点的兄弟(同级)节点往前数2个节点
3)text:的文本。

批注 2020-06-27 173342.png

最佳答案

查看完整内容

不知道网址,看不到网页代码,只从语法上看就是: soup.find('span', class_='next').previous_sibling.previous_sibling.text 1)('span', class_='next'):找class为next的span节点 2)previous_sibling.previous_sibling:这个节点的兄弟(同级)节点往前数2个节点 3)text:的文本。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-6-27 17:37:09 | 显示全部楼层    本楼为最佳答案   
本帖最后由 suchocolate 于 2020-6-27 19:12 编辑

不知道网址,看不到网页代码,只从语法上看就是:
soup.find('span', class_='next').previous_sibling.previous_sibling.text
1)('span', class_='next'):找class为next的span节点
2)previous_sibling.previous_sibling:这个节点的兄弟(同级)节点往前数2个节点
3)text:的文本。

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-6-27 17:37:49 | 显示全部楼层

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2020-6-27 18:58:54 | 显示全部楼层

那应该返回的是9才对,为啥最后返回的是10

一开始找到的节点是这一个,那应该返回的是9才对,为啥最后返回的是10

一开始找到的节点是这一个,那应该返回的是9才对,为啥最后返回的是10

前移两个兄弟节点之后是这个

前移两个兄弟节点之后是这个
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2020-6-27 19:01:57 | 显示全部楼层
suchocolate 发表于 2020-6-27 18:31
不知道网址,看不到网页代码,只从语法上看就是:
soup.find('span', class_='next').previous_sibling.pr ...

那应该返回的是9才对啊,为啥返回的是10

一开始定位这个地方

一开始定位这个地方

前移两个兄弟节点变成这里

前移两个兄弟节点变成这里
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-6-27 19:16:21 | 显示全部楼层
混沌未开 发表于 2020-6-27 19:01
那应该返回的是9才对啊,为啥返回的是10

那你能不能贴出你的网站和所有代码,让我们和你一起分析分析,没有网址和代码,你让我们猜你怎么写的吗?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2020-6-27 19:44:52 | 显示全部楼层
suchocolate 发表于 2020-6-27 19:16
那你能不能贴出你的网站和所有代码,让我们和你一起分析分析,没有网址和代码,你让我们猜你怎么写的吗? ...
from bs4 import BeautifulSoup
import requests

def url_open(url):
    headers = {'user-agent':
                   'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/57.0.2987.98 Safari/537.36'
               }
    res = requests.get(url, headers=headers)

    return res

url = 'https://movie.douban.com/top250'
res = url_open(url)
soup = BeautifulSoup(res.text, 'html.parser')
depth = soup.find('span', class_='next').previous_sibling.previous_sibling.text
depth = int(depth)
print(depth)
就这段
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-6-27 20:34:54 | 显示全部楼层
本帖最后由 suchocolate 于 2020-6-27 20:39 编辑

bs的previous/next_sibling空白(空白换行)也算兄弟节点。
3.png
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2020-6-27 20:55:52 | 显示全部楼层
suchocolate 发表于 2020-6-27 20:34
bs的previous/next_sibling空白(空白换行)也算兄弟节点。

这个“空白”和“event”我的不显示啊,这个咋设置
捕获.jpg
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-6-27 21:09:45 | 显示全部楼层
第三行代码 中  .previous_sibling.previous_sibling 是什么意思
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-6-28 00:40:32 | 显示全部楼层
混沌未开 发表于 2020-6-27 20:55
这个“空白”和“event”我的不显示啊,这个咋设置

我的firefox默认显示,不需要设置。
总之你记住2个节点之间有换行而不是连着的,bs就解析为换行也算作一个兄弟节点。
1)有换行,换行是bb的直接previous_sibling:
<div>aa</div>
<div>bb</div>
2)连着的,aa是bb的直接previous_sibling:
<div>aa</div><div>bb</div>
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-6-28 03:53:13 | 显示全部楼层
suchocolate 发表于 2020-6-27 18:31
不知道网址,看不到网页代码,只从语法上看就是:
soup.find('span', class_='next').previous_sibling.pr ...

解释的可以,鱼币给你了没
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-1-20 05:58

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表