【问题标题】:working with hrefs extracted from Beautifulsoup使用从 Beautifulsoup 中提取的 href
【发布时间】:2016-12-09 10:04:27
【问题描述】:

我是一名 Python 初学者,学习网络爬虫。

在这个项目中,我必须检索一些hrefs,然后打印出每个href 链接中的文本内容。到目前为止,这是我的代码:

import requests, bs4, os, webbrowser
url = 'http://www.constructeursdefrance.com/resultat/?dpt=53'
res = requests.get(url)
res.raise_for_status()

soup = bs4.BeautifulSoup(res.text,'html.parser')
for a in soup.select('.link'):
    links = a.find('a').attrs['href']

我用链接尝试了很多东西,但它会说“unicode is not callable”。 我如何使用这些链接并最终遍历它们以提取其中的文本?

谢谢

【问题讨论】:

    标签: python-2.7 beautifulsoup web-crawler python-unicode


    【解决方案1】:

    你的代码差不多完成了,只是一点点改变

    import requests, bs4, os, webbrowser
    url = 'http://www.constructeursdefrance.com/resultat/?dpt=53'
    res = requests.get(url)
    res.raise_for_status()
    
    soup = bs4.BeautifulSoup(res.text,'html.parser')
    links = []
    for div in soup.select('.link'):
        link = div.a.get('href')
        links.append(link)
    print(links)
    

    出来:

    ['http://www.constructeursdefrance.com/concept-habitat/',
     'http://www.constructeursdefrance.com/maisons-bois-cruard/',
     'http://www.constructeursdefrance.com/passiva-concept/',
     'http://www.constructeursdefrance.com/les-constructions-de-la-mayenne/',
     'http://www.constructeursdefrance.com/maisonsdenfrance53/',
     'http://www.constructeursdefrance.com/lemasson53/',
     'http://www.constructeursdefrance.com/ecb53/',
     'http://www.constructeursdefrance.com/villadeale-53/',
     'http://www.constructeursdefrance.com/habitat-plus-53/']
    

    select('.link') 将返回一个包含子标签 a 的 div 标签列表, 所以你可以通过div.a 获得标签,而不是通过div.a.get('href') 获得href

    【讨论】:

      【解决方案2】:

      尝试以下方法:

      import requests, bs4, os, webbrowser
      url = 'http://www.constructeursdefrance.com/resultat/?dpt=53'
      res = requests.get(url)
      res.raise_for_status()
      
      soup = bs4.BeautifulSoup(res.text,'lxml')
      links = soup.findAll('a')
      
      for link in links:
          try:
              print link.attrs['href']
          except:
              pass
      

      希望这会有所帮助。

      【讨论】:

      • 但是说我想让 python 从每个链接中检索一些数据,我该怎么做呢?似乎我无法将这些链接分开以单独使用它们......
      • 您可以做两件事,将所有链接存储在列表变量中,然后遍历该列表并为每个链接重复整个过程,或者您可以直接在上面的 for 循环中执行此操作并重复上述过程对于您获得的每个链接
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-12-26
      • 2020-03-11
      • 1970-01-01
      • 2020-09-11
      • 1970-01-01
      • 2017-11-10
      • 2015-04-13
      相关资源
      最近更新 更多