如何让python将列表中的链接视为单个项目

时间:2016-07-18 18:38:19

标签: python list python-3.x

我有这个脚本:

import urllib.request
from bs4 import BeautifulSoup

url= 'https://www.inforge.net/xi/forums/liste-proxy.1118/'
soup = BeautifulSoup(urllib.request.urlopen(url), "lxml")

base = ("https://www.inforge.net/xi/")

for tag in soup.find_all('a', {'class':'PreviewTooltip'}):
    links = (tag.get('href'))
    final = base + links

print (final[0])

其中包含this page中主题的每个链接。

问题是当我print(final[0])时输出为:

h

而不是整个链接。有人可以帮我这个吗?

1 个答案:

答案 0 :(得分:4)

i=20000的类型为final,因此,将其编入位置str将导致0的第一个字符被打印,具体为{{1 }}

如果您将url用作h,则需要打印所有final

str

或者,如果您必须拥有print(final) ,请在list循环中final listfor括在方括号[]中:

final = [base + links]

然后print(final[0])将按照您的预期打印list的第一个元素。

正如@Bryan指出的那样,我刚刚注意到,似乎你可能会对Python中()的使用感到困惑。在,内没有逗号(),他们什么都不做。如果您添加逗号,则会将其转换为tuples(不是lists,列表使用方括号[])。

所以:

base = ("https://www.inforge.net/xi/")

导致base引用str类型的值,而:

base = ("https://www.inforge.net/xi/", )
# which can also be written as:
base =  "https://www.inforge.net/xi/",

导致base引用具有单个元素的tuple类型的值。

同样适用于名称links

links = (tag.get('href'))   # 'str'
links = (tag.get('href'), ) # 'tuple'

如果您将linksbase更改为元组,那么final将在执行tuple后以2 final = base + links结尾。因此,在这种情况下,您应该在print调用期间加入元组内的元素:

print ("".join(final))  # takes all elements in final and joins them together 
相关问题