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 循環(huán)中列出 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 循環(huán)和返回值分開:
website, links = collect_links(url)
for link in links:
get_info(website[0], link)
添加回答
舉報