Python正则表达式HTML

2024-05-18 12:03:49 发布

您现在位置:Python中文网/ 问答频道 /正文

我快疯了,希望有人能帮我。你知道吗

我正在尝试正则表达式此url:https://www.reddit.com/r/spacex/?count=50&after=t3\uxxxxxxx,其中x是数字和字母。你知道吗

url来自HTML文件:

https://www.reddit.com/r/spacex/?count=25&after=t3_319905

我试过这个:

re.search(r'(<a href=")(https://www.reddit.com/r/spacex/?count=25.+?)(")', subreddit).group(2)

但我一直得到NoneType对象没有属性group。你知道吗


Tags: 文件httpscomurlhtmlwwwcount字母
2条回答

使用HTML解析器,比如^{}。它提供了一种指定正则表达式以匹配属性值的方法:

soup.find_all('a', href=re.compile("after=t3_\w+"))

工作示例:

import re
from bs4 import BeautifulSoup
import requests

url = "https://www.reddit.com/r/spacex/?count=25&after=t3_319905"
headers = {'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2272.118 Safari/537.36'}
response = requests.get(url, headers=headers)

soup = BeautifulSoup(response.content)

print soup.find_all('a', href=re.compile("after=t3_\w+"))

另请参见regex+HTML问题的“必须提供”链接:

?是regex中的一个特殊字符,它使前面的标记成为可选的。您需要在regex中转义?,以便匹配文字?字符。你也需要逃逸点,但不是.+?中的点。你知道吗

re.search(r'(<a href=")(https://www\.reddit\.com/r/spacex/\?count=25.+?)(")', subreddit).group(2)
                                                          ^
                                                          |

这里不需要额外的捕获组。只要一个抓捕小组就够了。你知道吗

re.search(r'<a href="(https://www\.reddit\.com/r/spacex/\?count=25.+?)"', subreddit).group(1)

相关问题 更多 >