【问题标题】:how to fix the def to return the links如何修复def以返回链接
【发布时间】:2019-09-06 18:23:00
【问题描述】:

我用beautifullSoup 在一个网站上找到了一些链接,需要将它们以列表(或txt 文件)的形式返回以供以后使用。

这是从他们指向的网站上的链接中获取一些文本。我试图创建一个def 来返回链接,但我不够聪明,无法让 def 正常工作。

for link in soup.find_all('a', href=True):
    print(link["href"])

我从上面的代码中获得了一个链接列表,并且可以将其写入文本文件(由我自己)并制作一个新的 python 脚本,但我宁愿“返回”它以继续脚本,顺便说一句学习一些东西。 我想出了这个但不起作用:

def linkgetter(soup):
    for link in soup.find('a', href=True):
    return soup

它会打印出整个网站的 html 代码并且不过滤链接。

【问题讨论】:

  • 一般来说,您希望返回由for 循环提取的链接列表,而不是代表您从中提取链接的整个页面对象的soup。这就是a list comprehension 所做的。

标签: python web-scraping beautifulsoup


【解决方案1】:
def get_links(soup):
    return [link["href"] for link in soup.find_all('a', href=True)]

【讨论】:

  • 虽然此代码可能会回答问题,但提供有关此代码为何和/或如何回答问题的额外上下文可提高其长期价值。
【解决方案2】:

您可以尝试以下方法:

from bs4 import BeautifulSoup
import urllib2
import re

def parse_links(url):
    links = []
    html = urllib2.urlopen(url)
    soup = BeautifulSoup(html)
    for link in soup.findAll('a'):
        links.append(link.get('href'))
    return links

print parse_links("https://stackoverflow.com/questions/57826906/how-to-fix-the-def-to-return-the-links#57826972")

如果您想获取以 http:// 开头的链接,您可以使用:

soup.findAll('a', attrs={'href': re.compile("^http://")})

【讨论】:

  • 好的,非常感谢。 urllib2 应该替换为 urllib3 并且 re 应该对应于请求?
  • 您可以将 urllib2 替换为 urllib3。我已将 re 用于正则表达式匹配操作,以防万一您对解析以 http:// 开头的链接感兴趣。
猜你喜欢
  • 1970-01-01
  • 2020-09-03
  • 1970-01-01
  • 2020-07-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多