跨列表提取 RegEx 模式,不包括其他 html 代码
Extracting RegEx pattern across list excluding other html code
我已经编写了一个脚本来提取可用报告的列表 url 可用于文本提取的扩展页面。
我已经使用解析和BeautifulSoup提取了使用此方法的最新报告的参考区域。
home = BeautifulSoup(home_url, 'html.parser')
container = home.find('div', attrs={'class': 'list'})
report_url_locations = list(x for x in container.findAll('a'))
这会生成包含每个报告的列表及其唯一的 html 扩展名,每次上传新报告时都会更新,例如:
[<a href="2022-05/13/c_76843.htm">May 16: Daily report</a>,
<a href="2022-05/12/c_76842.htm">May 15: Daily report</a>,
<a href="2022-05/11/c_76841.htm">May 14: Daily report</a>,
<a href="2022-05/10/c_76839.htm">May 13: Daily report</a>]
我已经设法编写了一些代码来去除 html 垃圾并只保留第一个元素的扩展名(即第一个报告)。
latest_sitrep_location = str(report_url_locations[0])
latest_sitrep_htm_location = re.search(r"[0-9]+-[0-9]+/[0-9]+/+c_[0-9]+.+htm",latest_sitrep_location)
这给了我:
"2022-05/13/c_76843.htm"
但是当我尝试对列表中的每个元素执行此操作时,它只会把中间的所有垃圾都扔给我:
all_urls= re.findall(r"[0-9]+-[0-9]+/[0-9]+/+c_[0-9]+.+htm", str(report_url_locations))
all_urls
['2022-05/13/c_76843.htm">May 16: Daily Report</a>, <a href="2022-05/12/c_76842.htm">May 15: Daily Report</a>, <a href="2022-05/11/c_76841.htm">May 14: Daily Report</a>, <a href="2022-05/10/c_76839.htm">May 13: Daily Report</a>]
但我想要的是:
["2022-05/13/c_76843.htm","2022-05/12/c_76842.htm","2022-05/11/c_76841.htm","2022-05/10/c_76839.htm"]
有人可以告诉我我需要在正则表达式中包含什么以确保排除其他 html 吗?我很确定我需要将 report_url_locations 中的每个元素都转换为字符串,但我不知道该怎么做。
你为什么不试试这个:
report_url_locations = [x["href"] for x in container.findAll('a')]
然后打印 report_url_locations
顺便说一句,here's why你不应该使用regex
来解析HTML。
编辑:不要使用正则表达式进行 HTML 解析,你知道该怎么做。
如果您决定使用正则表达式,则可以使用 r'(?:href=)\"(.*?)\"'
。
text="""<a href="2022-05/13/c_76843.htm">May 16: Daily report</a>,
<a href="2022-05/12/c_76842.htm">May 15: Daily report</a>,
<a href="2022-05/11/c_76841.htm">May 14: Daily report</a>,
<a href="2022-05/10/c_76839.htm">May 13: Daily report</a>
"""
re.findall(r'(?:href=)\"(.*?)\"', text)
输出
['2022-05/13/c_76843.htm',
'2022-05/12/c_76842.htm',
'2022-05/11/c_76841.htm',
'2022-05/10/c_76839.htm']
我已经编写了一个脚本来提取可用报告的列表 url 可用于文本提取的扩展页面。
我已经使用解析和BeautifulSoup提取了使用此方法的最新报告的参考区域。
home = BeautifulSoup(home_url, 'html.parser')
container = home.find('div', attrs={'class': 'list'})
report_url_locations = list(x for x in container.findAll('a'))
这会生成包含每个报告的列表及其唯一的 html 扩展名,每次上传新报告时都会更新,例如:
[<a href="2022-05/13/c_76843.htm">May 16: Daily report</a>,
<a href="2022-05/12/c_76842.htm">May 15: Daily report</a>,
<a href="2022-05/11/c_76841.htm">May 14: Daily report</a>,
<a href="2022-05/10/c_76839.htm">May 13: Daily report</a>]
我已经设法编写了一些代码来去除 html 垃圾并只保留第一个元素的扩展名(即第一个报告)。
latest_sitrep_location = str(report_url_locations[0])
latest_sitrep_htm_location = re.search(r"[0-9]+-[0-9]+/[0-9]+/+c_[0-9]+.+htm",latest_sitrep_location)
这给了我:
"2022-05/13/c_76843.htm"
但是当我尝试对列表中的每个元素执行此操作时,它只会把中间的所有垃圾都扔给我:
all_urls= re.findall(r"[0-9]+-[0-9]+/[0-9]+/+c_[0-9]+.+htm", str(report_url_locations))
all_urls
['2022-05/13/c_76843.htm">May 16: Daily Report</a>, <a href="2022-05/12/c_76842.htm">May 15: Daily Report</a>, <a href="2022-05/11/c_76841.htm">May 14: Daily Report</a>, <a href="2022-05/10/c_76839.htm">May 13: Daily Report</a>]
但我想要的是:
["2022-05/13/c_76843.htm","2022-05/12/c_76842.htm","2022-05/11/c_76841.htm","2022-05/10/c_76839.htm"]
有人可以告诉我我需要在正则表达式中包含什么以确保排除其他 html 吗?我很确定我需要将 report_url_locations 中的每个元素都转换为字符串,但我不知道该怎么做。
你为什么不试试这个:
report_url_locations = [x["href"] for x in container.findAll('a')]
然后打印 report_url_locations
顺便说一句,here's why你不应该使用regex
来解析HTML。
编辑:不要使用正则表达式进行 HTML 解析,你知道该怎么做。
如果您决定使用正则表达式,则可以使用 r'(?:href=)\"(.*?)\"'
。
text="""<a href="2022-05/13/c_76843.htm">May 16: Daily report</a>,
<a href="2022-05/12/c_76842.htm">May 15: Daily report</a>,
<a href="2022-05/11/c_76841.htm">May 14: Daily report</a>,
<a href="2022-05/10/c_76839.htm">May 13: Daily report</a>
"""
re.findall(r'(?:href=)\"(.*?)\"', text)
输出
['2022-05/13/c_76843.htm',
'2022-05/12/c_76842.htm',
'2022-05/11/c_76841.htm',
'2022-05/10/c_76839.htm']