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

标签 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

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

最佳答案

final类型为 str ,因此,将其索引到位置 0将产生 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最终将成为 2 元素 tuple之后final = base + links被执行。因此,在这种情况下,您应该在 print 期间加入元组内的元素。调用:

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

关于python - 如何让Python将列表中的链接视为单个项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38443816/

相关文章:

python - 如何将字典发送到接受 **kwargs 的函数?

python - 比较并返回字典字符串值?

c# - 从更大的列表中过滤掉无序整数列表

python - 访问多个嵌套字典以返回最小的键和值

python - 如何比较子列表

python-3.x - Python 3 .format 和 List

python - 找到一个被新行打断的长单词

python - 根据Python中的条件从两个数组中随机选择

python - Django 访问 OneToOneField

python - 在等待事件的程序中捕获键盘中断