Python 如何获取<;中的值列表;p>;如果其结束标记为<\\/p>;
这很奇怪。我试图从一个网站上抓取Python 如何获取<;中的值列表;p>;如果其结束标记为<\\/p>;,python,beautifulsoup,Python,Beautifulsoup,这很奇怪。我试图从一个网站上抓取的标签末尾是,而不仅仅是。显然,每次我调用soup.find_all('p'),它都不会返回任何值,而是无值。当我尝试a或div时,它没有任何问题,因为它们都是结构良好的标记,分别带有和结束标记。我不知道该如何解决这个问题 from urllib.request import Request, urlopen from bs4 import BeautifulSoup url = 'http://www.gmanetwork.com/news/story/65
的标签末尾是
,而不仅仅是
。显然,每次我调用soup.find_all('p')
,它都不会返回任何值,而是无值。当我尝试a
或div
时,它没有任何问题,因为它们都是结构良好的标记,分别带有
和
结束标记。我不知道该如何解决这个问题
from urllib.request import Request, urlopen
from bs4 import BeautifulSoup
url = 'http://www.gmanetwork.com/news/story/656223/money/economy/iphone-worries-weigh-on-wall-street'
page = urlopen(Request(url, headers={'User-Agent': 'Mozilla/5.0'}))
data = page.read()
soup = BeautifulSoup(data, 'html.parser')
print(soup.find_all('p'))
编辑
正如建议的那样,我发现像Splinter这样的无头浏览器有点令人沮丧,因为模块需要浏览器依赖关系(如果我错了,请纠正我)。您可以这样做:
import re
a = "<p> This is a text <\\/p>"
match = re.match("""^.*<p>(.*)<\\\\/p>.*$""", a).group(1)
print(match)
重新导入
a=“这是一个文本”
match=re.match(“^.*(...*$”,a).group(1)
打印(匹配)
你能给我一个HTML代码的例子吗?我非常怀疑它是否能正确呈现。@ivan_pozdeev是的,代码工作正常。唯一的问题是我无法获取p
标记中的值,因为每个p
标记都有\\/p
结束标记。结束标记在脚本元素中。如果您想要呈现脚本元素,您需要呈现JavaScript,请参阅我对可能重复的问题的答案。您是否安装了lxml
和/或html5lib
?是的,我也在处理这个问题。我别无选择,只能使用正则表达式。顺便说一句,谢谢你的回答。没问题,请记住这将返回文本的最后一个匹配项,我不久前找到了一个解决方案,但我找不到,但我记得在a**中找到所有匹配项是一件痛苦的事。我试过re.findall(r“(.*),data.decode('utf-8')
,它工作得很好。其他人不建议使用此方法,因为结束标记也会更改每个请求,例如
然后
,然后再返回到
。我希望bs4的维护人员将来也能具备这种能力。