我有这个脚本:
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
一个list
在 for
将其括在方括号 []
中进行循环:
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'
如果你改变links
和base
则为元组 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/