我正在尝试从站点地图中提取所有url中包含foo字样的网址。我设法提取了所有的网址,但不知道如何只获取我想要的网址。因此,在下面的示例中,我只希望返回苹果和梨的网址。
<url>
<loc>
https://www.example.com/p-1224-apples-foo-09897.php
</loc>
<lastmod>2018-05-29</lastmod>
<changefreq>daily</changefreq>
<priority>1.0</priority>
</url>
<url>
<loc>
https://www.example.com/p-1433-pears-foo-00077.php
</loc>
<lastmod>2018-05-29</lastmod>
<changefreq>daily</changefreq>
<priority>1.0</priority>
</url>
<url>
<loc>
https://www.example.com/p-3411-oranges-ping-66554.php
</loc>
<lastmod>2018-05-29</lastmod>
<changefreq>daily</changefreq>
<priority>1.0</priority>
</url>
答案 0 :(得分:0)
假设它们始终在元素loc
中标记,那么您可以使用XPath方法
//loc[contains(text(),'foo')]
通用将是:
//*[contains(text(),'foo')]
它需要使用支持XPath的lxml
,请参阅here.
答案 1 :(得分:0)
我将xml修改为有效格式(添加<urls>
和</urls>
),然后将它们保存到src.xml中:
<urls>
<url>
<loc>
https://www.example.com/p-1224-apples-foo-09897.php
</loc>
<lastmod>2018-05-29</lastmod>
<changefreq>daily</changefreq>
<priority>1.0</priority>
</url>
<url>
<loc>
https://www.example.com/p-1433-pears-foo-00077.php
</loc>
<lastmod>2018-05-29</lastmod>
<changefreq>daily</changefreq>
<priority>1.0</priority>
</url>
<url>
<loc>
https://www.example.com/p-3411-oranges-ping-66554.php
</loc>
<lastmod>2018-05-29</lastmod>
<changefreq>daily</changefreq>
<priority>1.0</priority>
</url>
</urls>
使用xml.etree.ElementTree
解析xml:
>>> import xml.etree.ElementTree as ET
>>> tree = ET.parse('src.xml')
>>> root = tree.getroot()
>>> for url in root.findall('url'):
... for loc in url.findall('loc'):
... if loc.text.__contains__('foo'):
... print(loc.text)
...
https://www.example.com/p-1224-apples-foo-09897.php
https://www.example.com/p-1433-pears-foo-00077.php
答案 2 :(得分:0)
如果拥有所有URL,则可以使用in
检查每个URL中是否包含单词“ foo”。这样的事情(假设您已经在名为urls
的列表中拥有所有网址):
urls = [url for url in urls if 'foo' in url]
答案 3 :(得分:0)
from xml.dom.minidom import parse
import xml.dom.minidom
xml_file = r'your_file.xml'
DOMTree = xml.dom.minidom.parse(xml_file)
root_node = DOMTree.documentElement
print(root_node.nodeName)
loc_nodes = root_node.getElementsByTagName("loc")
for loc in loc_nodes:
print(loc.childNodes[0].data)