生成一个列表以将网址提供给网络抓取工具

时间:2017-02-19 13:06:45

标签: python list python-3.x loops web-scraping

我几个月来一直在学习Python作为第一语言,我正在尝试建立一个网络刮刀,而不是依靠我给它的网址,抓取一个网站来获取我的网址。

我已经确定网站的哪些部分包含我需要的网址,并且知道/认为我需要2个列表来执行我想要的操作。

第一个是城市的网址列表,第二个是这些网站中的单位网址列表。这是我最终想要迭代并从中获取数据的单位的网址。到目前为止,我有以下代码:

def get_cities():
    city_sauce = urllib.request.urlopen('the_url')
    city_soup = BeautifulSoup(city_sauce, 'html.parser')
    the_city_links = []
    for city in city_soup.findAll('div', class_="city-location-menu"):
        for a in city.findAll('a', href=True, text=True):
                the_city_links.append('first_half_of_url' + a['href'])
    return the_city_links

当我打印出来时,它会显示我需要的所有网址,所以我想我已经在这里成功创建了一个链接列表?

第二部分如下:

def get_units():
    for theLinks in get_cities():
        unit_sauce = urllib.request.urlopen(theLinks)
        unit_soup = BeautifulSoup(unit_sauce, 'html.parser')
        the_unit_links = []
        for unit in unit_soup.findAll('div', class_="btn white-green icon-right-open-big"):
            for aa in unit.findAll('a', href=True, text=True):
                the_unit_links.append(aa)
        return the_unit_links

打印时,只返回[]。我不知道我哪里出错了,任何帮助都将不胜感激!

第2部分修订:

def get_units():
    for the_city_links in get_cities():
        unit_sauce = urllib.request.urlopen(the_city_links)
        unit_soup = BeautifulSoup(unit_sauce, 'html.parser')
        the_unit_links = []
        for unit in unit_soup.findAll('div', class_="btn white-green icon-right-open-big"):
            for aa in unit.findAll('a', href=True, text=True):
                the_unit_links.append(aa)
        return the_unit_links

3 个答案:

答案 0 :(得分:2)

假设我理解你是如何使用它的 - 你的函数将在get_cities()中的第一个链接之后返回,这可能没有单位?我认为你需要在函数的开头设置the_unit_links = [],然后将函数的返回行移动一个缩进 - 这样只有在get_cities中的所有链接都被删除后才会返回。

答案 1 :(得分:1)

def getLinks():
    city_sauce = urllib.request.urlopen('the_url')
    city_soup = BeautifulSoup(city_sauce, 'html.parser')
    the_city_links = []

    for city in city_soup.findAll('div', class_="city-location-menu"):
            for a in city.findAll('a', href=True, text=True):
                    the_city_links.append('first_half_of_url' + a['href'])
        #return the_city_links

    # print the_city_links

    for the_city_links in the_city_links:
        unit_sauce = urllib.request.urlopen(the_city_links)
        unit_soup = BeautifulSoup(unit_sauce, 'html.parser')
        the_unit_links = []
        for unit in unit_soup.findAll('div', class_="btn white-green icon-right-open-big"):
            for aa in unit.findAll('a', href=True, text=True):
                the_unit_links.append(aa)
        return the_unit_links

注意: - Print the_city_links并检查您是否获得了预期的输出,然后在其上运行另一个循环以获取相应的unit_links

答案 2 :(得分:1)

/bin/sh