我有这个脚本:
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
而不是整个链接。有人可以帮我这个吗?
答案 0 :(得分:4)
i=20000
的类型为final
,因此,将其编入位置str
将导致0
的第一个字符被打印,具体为{{1 }}
如果您将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
将在执行tuple
后以2 final = base + links
结尾。因此,在这种情况下,您应该在print
调用期间加入元组内的元素:
print ("".join(final)) # takes all elements in final and joins them together