【问题标题】:Crawling sitemap.xml via python通过 python 抓取 sitemap.xml
【发布时间】:2015-09-24 11:57:35
【问题描述】:

我正在抓取一个 sitemap.xml,我的目标是找到所有 url 和它们的增量计数。

下面是xml的结构

<?xml version="1.0" encoding="UTF-8"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
    <url>
        <loc>http://www.htcysnc.com/m/designer-sarees</loc>
        <lastmod>2014-09-01</lastmod>
    <changefreq>hourly</changefreq>
    <priority>0.9</priority>
</url>
<url>
    <loc>http://www.htcysnc.com/m/anarkali-suits</loc>
    <lastmod>2014-09-01</lastmod>
    <changefreq>hourly</changefreq>
    <priority>0.9</priority>
</url>

下面是我的代码

from BeautifulSoup import BeautifulSoup
import requests
import gzip
from StringIO import StringIO


def crawler():
    count=0
    url="http://www.htcysnc.com/sitemap/sitemap_product.xml.gz"
    old_xml=requests.get(url)
    new_xml=gzip.GzipFile(fileobj=StringIO(old_xml.content)).read()
    #new_xml=old_xml.text
    final_xml=BeautifulSoup(new_xml)
    item_to_be_found=final_xml.findAll('loc')
    for i in item_to_be_found:
        count=count+1
        print i
        print count
    crawler()

我的输出是这样的

<loc>http://www.htcysnc.com/elegant-yellow-green-suit-seven-east-p63703</loc>
1
<loc>http://www.htcysnc.com/elegant-orange-pink-printed-suit-seven-east-p63705</loc>
2

需要输出为不带 loc 和 /loc 的链接。已尝试替换命令,但会引发错误。

【问题讨论】:

  • 你有什么问题?
  • 抱歉,帖子搞砸了。现在已经编辑过了。

标签: python xml beautifulsoup web-crawler


【解决方案1】:

这里item_to_be_found 列表中的每个项目都是Tag 类型对象,因此您可以使用.text.string 来获取&lt;loc&gt; 标签内的字符串。尽管.text.stringdifferences 在这种情况下两者的工作方式相同。

for loc in item_to_be_found:
    print item_to_be_found.index(loc) + 1, loc.text

这会给你一个类似的结果

1 http://www.htcysnc.com/m/designer-sarees
2 http://www.htcysnc.com/m/anarkali-suits

【讨论】:

  • 为什么我的 loc 总是未定义?
【解决方案2】:

您可以使用一些属性来代替循环,而不是使用循环,这可能会使您的代码更快一些。

print i.text.strip()

这应该会给你没有任何标签的必要信息。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-20
    • 2021-07-22
    相关资源
    最近更新 更多