我通常将 json 用于列表,但它不适用于集合。是否有类似的函数将集合写入输出文件 f?像这样的东西,但对于集合:
f=open('kos.txt','w')
json.dump(list, f)
f.close()
Run Code Online (Sandbox Code Playgroud) 最新更新:我将我的问题简化为如何递归地从站点获取所有链接,包括每个页面的子链接等。
我想我知道如何获取一页的所有子链接:
from bs4 import BeautifulSoup
import requests
import re
def get_links(site, filename):
f=open(filename, 'w')
url = requests.get(site)
data = url.text
soup = BeautifulSoup(data, 'lxml')
for links in soup.find_all('a'):
f.write(str(links.get('href'))+"\n")
f.close()
r="https://en.wikipedia.org/wiki/Main_Page"
filename="wiki"
get_links(r,filename)
Run Code Online (Sandbox Code Playgroud)
我如何递归地确保网站上的所有链接也被收集并写入同一个文件?
所以我尝试了这个,它甚至没有编译。
def is_url(link):
#checks using regex if 'link' is a valid url
url = re.findall('http[s]?://(?:[a-zA-Z]|[0-9]|[$-_@.&+#]|[!*/\\,() ]|(?:%[0-9a-fA-F][0-9a-fA-F]))+', link)
return (" ".join(url)==link)
def get_links(site, filename):
f=open(filename, 'a')
url = requests.get(site)
data = url.text
soup = BeautifulSoup(data, 'lxml')
for links in soup.find_all('a'):
if is_url(links):
f.write(str(links.get('href'))+"\n")
get_links(links, filename)
f.close()
Run Code Online (Sandbox Code Playgroud)