我试图通过递归调用 all_pages 函数来获取网站的所有唯一网址,但该函数并未给出网站的所有网址。
我想做的就是使用 BeautifulSoup 获取网站的所有唯一网址。我的代码如下所示:
base_url = "http://www.readings.com.pk/"
unique_urls=[]
def all_pages(base_url,unique_urls=[]):
response = requests.get(base_url)
soup = BeautifulSoup(response.content, "html.parser")
for link in soup.find_all("a"):
url = link["href"]
absolute_url = urljoin(base_url, url)
if absolute_url not in unique_urls:
if base_url in absolute_url:
unique_urls.append(absolute_url)
print (absolute_url)
all_pages(absolute_url,unique_urls,book_urls)
all_pages(base_url,unique_urls)
最佳答案
使用response.text
而不是response.content
此外,您需要在某个时候返回。此外,不要将 unique_urls 设为列表,而是将其设为集合,这样它们将始终是唯一的。
此外,您的方法是递归的,并且 python 有一个 max recursion depth ,所以也许你应该这样做:
base_url = "http://www.readings.com.pk/"
def all_pages(base_url):
response = requests.get(base_url)
unique_urls = {base_url}
visited_urls = set()
while len(unique_urls) > len(visited_urls)
soup = BeautifulSoup(response.text, "html.parser")
for link in soup.find_all("a"):
try:
url = link["href"]
except:
continue
absolute_url = base_url + url
unique_urls.add(absolute_url)
unvisited_url = (unique_urls - visited_urls).pop()
visited_urls.add(unvisited_url)
response = requests.get(unvisited_url)
return unique_urls
all_pages(base_url)
关于python - 如何使用 beautifulsoup 抓取整个网站,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42219699/