3

我解析了一个完整的 HTML 文件,用 Python 中的 Beautifulsoup 模块提取了一些 URL,代码如下:

for link in soup.find_all('a'):
    for line in link :
        if "condition" in line :

           print link.get("href")

我在 shell 中获得了一系列链接,这些链接观察 if 循环中的条件:

  • http:// ..link1
  • http:// ..link2
  • .
  • .
  • http:// ..链接

我怎样才能在这个列表的第一个链接中放入一个变量“输出”?

编辑:

网页是:http://download.cyanogenmod.com/?device=p970,脚本必须返回 HTML 页面中的第一个短 URL (http://get.cm/...)。

4

2 回答 2

6

您可以使用 oneliner 做到这一点:

import re

soup.find('a', href=re.compile('^http://get.cm/get'))['href']

将其分配给变量:

variable=soup.find('a', href=re.compile('^http://get.cm/get'))['href']

我不知道你到底在做什么,所以我将从头开始发布完整的代码:注意!如果您使用 bs4 更改导入

import urllib2
from BeautifulSoup import BeautifulSoup
import re

request = urllib2.Request("http://download.cyanogenmod.com/?device=p970")
response = urllib2.urlopen(request)
soup = BeautifulSoup(response)
variable=soup.find('a', href=re.compile('^http://get.cm/get'))['href']
print variable

>>> 
http://get.cm/get/4jj
于 2012-10-14T14:58:03.860 回答
1

您可以在 BeautifulSoup 中更轻松、更清晰地做到这一点,而无需循环。

假设您解析的 BeautifulSoup 对象被命名为soup

output = soup.find(lambda tag: tag.name=='a' and "condition" in tag).attrs['href']
print output

请注意,该find方法仅返回第一个结果,而find_all返回所有结果。

于 2012-10-14T15:49:37.997 回答