【发布时间】:2017-02-19 13:06:44
【问题描述】:
几个月来,我一直在学习 Python 作为第一语言,并且正在尝试构建一个网络爬虫,而不是依赖于我提供给它的 url,而是爬取一个网站来为我获取 url。
我已确定网站的哪些部分包含我需要的 url,并且知道/认为我需要 2 个列表来做我想做的事。
第一个是城市的 url 列表,第二个是这些城市中单位的 url 列表。这是我最终想要迭代并从中刮取数据的单元的网址。到目前为止,我有以下代码:
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
当我打印出来时,它会显示我需要的所有 url,所以我认为我已经成功地在这里创建了一个链接列表?
第二部分如下:
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
【问题讨论】:
-
您需要提供您要获取的链接?可能是您缺少获取某些内容,或者您获取的类有误。
-
我把网址放在
city_sauce中,我希望unit_sauce会获取这些链接中的每一个,这些链接存储在一个列表中,在unit_soup中解析它们,然后进入每个的链接并在'div', class_="btn white-green icon-right-open-big"处获取href,然后将它们添加到the_unit_links列表中,然后在我的刮板中对其进行迭代。有任何想法吗? @PiyushS.Wanare 我对第二部分稍作修改,请参阅修订。 -
如果你把数据放在一个函数本身会更好。
标签: python list python-3.x loops web-scraping