【问题标题】:How to scrape specific text in <p> elements with Python 3如何使用 Python 3 抓取 <p> 元素中的特定文本
【发布时间】:2020-04-21 20:15:42
【问题描述】:
我知道如何抓取整个 p 元素,但我想将位置的所有三个部分放在不同的类别中。我计划通过单独抓取它们并将它们单独放入一个 csv 文件来做到这一点。
这是带有示例位置的 Html:
<p>
70 Donald E Hiltz Connector Road
<br>
Kentville, NS
<br>
B4N 3V7
</p>
【问题讨论】:
标签:
python
html
python-3.x
web-scraping
【解决方案1】:
你的问题不是很清楚。
最好的解决方案是,如果您拥有该网站或如果 html 是您的,您可以将 id 放在 p 标签中并使用 Beautiful soups find(id="") 函数获取内容。
否则,您只能获取整个数据,并查看是否可以使用yourstring.split() 之类的字符串函数获取内容,如果您的数据一直像示例一样结构化,这可能很有用,因此您可以只使用单词及其序列。
很抱歉,由于我的声誉低,我无法发表评论,但如果你能更清楚地说明你如何抓取数据,以什么形式等等,那就更好了
【解决方案2】:
这就是我的工作方式:
from bs4 import BeautifulSoup
html = '''<p> 70 Donald E Hiltz Connector Road <br> Kentville, NS <br> B4N 3V7 </p>'''
soup =BeautifulSoup(html, 'html5lib')
# replace `br` tag with pipe that we use to split data
_ = [br.replace_with('|') for br in soup.find_all('br')]
data = [text.strip() for text in soup.find('p').text.split('|')]
print(data)
结果
['70 Donald E Hiltz Connector Road', 'Kentville, NS', 'B4N 3V7']
【解决方案3】:
另一种解决方案。
from simplified_scrapy import SimplifiedDoc,req,utils
html = '''
<p>
70 Donald E Hiltz Connector Road
<br>
Kentville, NS
<br>
B4N 3V7
</p>
'''
doc = SimplifiedDoc(html)
texts = doc.p.getText('|').split('|')
print (texts)
结果:
['70 Donald E Hiltz Connector Road', 'Kentville, NS', 'B4N 3V7']
这里有更多示例。 https://github.com/yiyedata/simplified-scrapy-demo/tree/master/doc_examples