3 回答
TA贡献1824条经验 获得超6个赞
你websites是一个list带有单个元素的字符串,而不是你用[]文字括起来的字符串。您需要删除[]以使其成为字符串,因为没有必要将其设为列表。
这样做之后,您可以获得返回值,并遍历链接,例如:
if __name__ == '__main__':
url = "https://www.cv-library.co.uk/companies/agencies/A"
website, links = collect_links(url)
for link in links:
get_info(website, link)
TA贡献1860条经验 获得超9个赞
代码中的主要错误在此链接中。
website = [soup.select_one("p.company-profile-website > a").get("href")]
这仅返回一个值:
http://www.autoskills-uk.com
你的功能应该是:
def collect_links(link):
res = requests.get(link)
soup = BeautifulSoup(res.text, "lxml")
websites = [x.get("href") for x in soup.select("p.company-profile-website > a")] #<============== Changed
items = [urljoin(url,item.get("href")) for item in soup.select("[id^='company-'] .search-companies-result-info h2 > a")]
return zip(websites, items)
作为网站和项目的 zip 返回。
现在您可以在 for 循环中列出 unpackitem和link:
if __name__ == '__main__':
url = "https://www.cv-library.co.uk/companies/agencies/A"
for item,link in collect_links(url):
get_info(item,link)
TA贡献1883条经验 获得超3个赞
您将返回两个列表,一个包含一个元素,另一个包含多个元素作为元组,并尝试遍历此元组,将每个列表解包为两个元素item和link.
我不明白你真正想要做什么,但你应该将 for 循环和返回值分开:
website, links = collect_links(url)
for link in links:
get_info(website[0], link)
添加回答
举报