我对此非常陌生,所以建立一个脚本来学习如何刮擦。 我正在查询主索引页面,查找包含我想要的联系信息的URL列表。
我成功地将索引列表放入一个集合中,然后尝试通过使用两个函数来迭代它(我确信有更好的方法来执行此操作)。在第一次迭代之后,它停止了,我根本不明白为什么。任何指针赞赏。
import requests
from bs4 import BeautifulSoup
linkset = set()
url = "http://someurl.com/venues"
r = requests.get(url)
soup = BeautifulSoup(r.content, "lxml")
base_url = "http://someurl.com/uk/"
links = soup.find_all("a", class_="supplier-link")
# A function to get the links from the top level directory.
def get_venue_link_list(links):
for link in links:
linkset.add(link.get("href"))
return linkset
#get_venue_link_list(links)
# When I test by printing linkset, I get the list of unique URL's.
# This works as expected.
#print linkset
# A function to go retrieve contact
def go_retrieve_contact(link_value):
for i in link_value:
link = i
venue_link = base_url + link
venue_request = requests.get(venue_link)
venue_soup = BeautifulSoup(venue_request.content, "lxml")
info = venue_soup.find_all("section", {"class": "findout"})
header = venue_soup.find_all("div", {"id": "supplier-header-desktop"})
go_get_info(info)
# Email, Phone and Website was nested in one div so it was a little easier to get.
# Will need to use a different div for address and social media names.
def go_get_info(info):
for item in info:
print "%s" % ((item.contents[3].find_all("span", {"class": "text"})[0].text)).strip()
print "%s" % ((item.contents[3].find_all("span", {"class": "text"})[1].text)).strip()
print "%s" % ((item.contents[3].find_all("span", {"class": "text"})[2].text)).strip()
#Lets comment out this next nested loop until I fix the above.
#for item in header:
#print item.contents[1].text
go_retrieve_contact(get_venue_link_list(links))
答案 0 :(得分:2)
groupby()
导致函数完全退出。你编写它的方式,你已经告诉函数在第一次迭代后立即返回 - 所以难怪它就会停止。 :)
这是一个缩进问题 - 你真正想要的是:
return
这使得循环首先完成,然后退出。
答案 1 :(得分:2)
那是因为您没有对其进行更改以继续迭代。你在循环中return
,所以它没有进入第二次迭代。你需要取消缩进该行:
def get_venue_link_list(links):
for link in links:
linkset.add(link.get("href"))
return linkset
答案 2 :(得分:2)
在get_venue_link_list()
中,循环中有一个return语句。这会导致函数在第一次到达时退出,因此您永远不会超出第一次迭代。从该函数的最后一行删除缩进。