尝试使用Beautiful Soup或ElementTree从迭代的链接列表中抓取信息

时间:2013-12-23 20:21:40

标签: python xml web-scraping beautifulsoup screen-scraping

我正在尝试抓取xml databasethese addresses链接列表。 (第二个链接是一个实际包含一些地址的示例页面。许多链接都没有。)

我能够检索我想要抓取的初始链接列表,但我似乎无法更进一步提取我正在寻找的最终信息(地址)。

我认为我的语法有错误,我尝试使用漂亮的汤和Python包含的库来抓取它,但它不起作用。

BSoup:

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:
    data = bs.find("html",{"i"})
    print data

非第三方:

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

任何输入都表示赞赏!感谢。

1 个答案:

答案 0 :(得分:1)

你的语法还可以。您只需要在第一页中关注这些链接,以下是米兰页面的样子:

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)
company_menu = bs.find_all('loc')
for item in company_menu:
    if 'milano' in item.text:
        subpage = requests.get(item.text)
        subsoup = BeautifulSoup(subpage.text)
        adresses = subsoup.find_all(class_='riquadro_agenzia_off')
        for adress in adresses:
            companyname.append(adress.text)
print companyname

要获取所有地址,只需删除代码中的“milano”块即可。我不知道它们是否都是根据相关规则进行格式化的,因为milano地址在div下有class =“riquandro_agenzia_off”,如果其他子页面也以这种方式格式化,那么它应该可以工作。无论如何,这应该让你开始。希望能帮助到你。