在Python中使用Beautifulsoup迭代xml中的非href链接并检索特定信息

时间:2013-12-18 22:20:45

标签: python html xml web-scraping beautifulsoup

我是一名python初学者,刚开始学习使用Bsoup抓取网站。

我正在尝试从this site上的所有单独链接中提取联系信息(地址,公司名称)。

一般来说,我知道如何在典型的html源代码中检索href列表,但由于这是一个xml,我只能将链接隔离出来以下列格式:

[U 'http://www.agenzia-interinale.it/milano']

到目前为止,我的代码为我提供了该格式的所有公司链接,但我不知道如何通过每个链接并提取相关信息。

from bs4 import BeautifulSoup
import requests
import re

resultsdict = {}
companyname = []
url1 = 'http://www.agenzia-interinale.it/sitemap-5.xml'

html = requests.get(url1).text
bs = BeautifulSoup(html)
# find the links to companies
company_menu = bs.find_all('loc')
for company in company_menu:
    print company.contents

从该链接列表中,首先需要确定该页面是否具有联系信息,然后如果它在this example中执行,则它应该提取地址/公司名称。

我相信我正在寻找的最终信息可以通过这个div过滤器隔离:

bs.find_all("div",{'style':'vertical-align:middle;'})

我尝试过嵌套循环,但我无法让它工作。

非常感谢任何输入!

2 个答案:

答案 0 :(得分:2)

没有必要为此使用BeautifulSoup。该站点返回完全有效的XML,可以使用Python包含的工具进行解析:

import requests
import xml.etree.ElementTree as et

req = requests.get('http://www.agenzia-interinale.it/sitemap-5.xml')
root = et.fromstring(req.content)
for i in root:
    print i[0].text  # the <loc> text

答案 1 :(得分:2)

根据你的要求,你想从xml获取url,但是你正在寻找格式化xml的css标签......所以错误的方式。

试试这个:

#!/usr/bin/env python
# -*- coding: utf-8 -*-
import urllib2 
from BeautifulSoup import BeautifulSoup

url1 = 'http://www.agenzia-interinale.it/sitemap-5.xml'

f = urllib2.urlopen(url1)

bs = BeautifulSoup(f)

for url in bs.findAll("loc"):
    print url.string

请注意,我正在使用findAll()方法,并查找“loc”标记,其中包含您要检索的数据。