鱼C论坛

 找回密码
 立即注册
查看: 2097|回复: 13

[已解决]爬虫

[复制链接]
发表于 2023-7-6 11:00:14 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
请问大佬们,爬取这个网站 的信息,它的演员信息一会是演员,一会是主演,用不了正则,该用什么方法呢,这是其中一个详情页https://www.ygdy8.net/html/gndy/jddy/20230629/63860.html
最佳答案
2023-7-6 11:14:09
哈岁NB 发表于 2023-7-6 11:11
还有这个该怎么修改成这个形式呢,小括号里的不是会被提取出来吗


用非保存分组就不会被提取出来了
actor_pattern = re.compile('◎(?:演  员|主  演)(.*?)◎', re.S)
屏幕截图(57)_LI_Moment.jpg
屏幕截图(57)_LI_Moment_Moment.jpg
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-7-6 11:00:30 | 显示全部楼层
爬取网站信息时,如果页面的结构复杂或者内容呈现形式不规律,正则表达式可能会变得复杂且难以维护。在这种情况下,可以考虑使用解析库,如BeautifulSoup或lxml,来处理HTML页面。

以下是一个使用BeautifulSoup来解析网页并提取演员信息的示例代码:
pythonimport requestsfrom bs4 import BeautifulSoup# 发送GET请求获取页面内容url = 'https://www.ygdy8.net/html/gndy/jddy/20230629/63860.html'response = requests.get(url)html = response.content# 创建BeautifulSoup对象soup = BeautifulSoup(html, 'html.parser')# 使用CSS选择器提取演员信息actor_elements = soup.select('div.co_content8 ul table:nth-child(2) tr:nth-child(n+2) td:nth-child(2) a')actors = [actor.text for actor in actor_elements]# 输出演员信息for actor in actors:    print(actor)
在上述示例中,我们使用了requests库发送GET请求获取网页内容,并使用BeautifulSoup解析HTML页面。通过使用CSS选择器div.co_content8 ul table:nth-child(2) tr:nth-child(n+2) td:nth-child(2) a,我们选择到了演员信息所在的元素。然后,我们遍历选取到的元素,提取出演员的文本内容,并将其存储在actors列表中。

请注意,示例代码中的CSS选择器仅适用于给定的详情页,如果网站结构不稳定或不一致,您可能需要根据不同页面的结构进行相应的调整。

希望这个示例能够帮助到您!如果还有其他疑问,请随时提问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-7-6 11:04:44 | 显示全部楼层
怎么用不了正则?你匹配演员或主演不就行了

正则:
(演\s{2}员|主\s{2}演)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-7-6 11:08:06 | 显示全部楼层
isdkz 发表于 2023-7-6 11:04
怎么用不了正则?你匹配演员或主演不就行了

正则:

那请问一下,如果有的页面有豆瓣评分,有的没有,没有的默认一个数值,这种该怎么写呢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-7-6 11:11:39 | 显示全部楼层
isdkz 发表于 2023-7-6 11:04
怎么用不了正则?你匹配演员或主演不就行了

正则:

还有这个该怎么修改成这个形式呢,小括号里的不是会被提取出来吗
actor_pattern = re.compile('◎演  员(.*?)◎', re.S)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-7-6 11:14:09 | 显示全部楼层    本楼为最佳答案   
哈岁NB 发表于 2023-7-6 11:11
还有这个该怎么修改成这个形式呢,小括号里的不是会被提取出来吗


用非保存分组就不会被提取出来了
actor_pattern = re.compile('◎(?:演  员|主  演)(.*?)◎', re.S)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-7-6 11:17:40 | 显示全部楼层
isdkz 发表于 2023-7-6 11:14
用非保存分组就不会被提取出来了

好的,感谢感谢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-7-6 11:18:02 | 显示全部楼层
陶远航 发表于 2023-7-6 11:00
爬取网站信息时,如果页面的结构复杂或者内容呈现形式不规律,正则表达式可能会变得复杂且难以维护。在这种 ...

好的,感谢感谢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-7-6 11:19:47 | 显示全部楼层
本帖最后由 isdkz 于 2023-7-6 11:21 编辑
哈岁NB 发表于 2023-7-6 11:08
那请问一下,如果有的页面有豆瓣评分,有的没有,没有的默认一个数值,这种该怎么写呢


给个例子:
import re
string = "◎豆瓣评分 6.4/10 from 3135 users"
pattern = r'◎豆瓣评分\s+(.*)'
result = match.group(1) if (match := re.search(pattern, string)) else "NULL"
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-7-6 11:20:50 | 显示全部楼层

好的,感谢感谢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-7-6 12:31:46 | 显示全部楼层
你哪来的旧EDGE?!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-7-6 13:12:03 | 显示全部楼层

电脑自带的呀,怎么了吗
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-7-6 13:14:58 | 显示全部楼层
哈岁NB 发表于 2023-7-6 13:12
电脑自带的呀,怎么了吗

旧电脑?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-7-6 13:19:30 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-9-22 13:36

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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