4 回答

TA貢獻(xiàn)1834條經(jīng)驗(yàn) 獲得超8個(gè)贊
這是實(shí)現(xiàn)其他人暗示的快速方法:
import requests
from bs4 import BeautifulSoup
with open('input.txt', 'r') as f_in:
for i, line in enumerate(map(str.strip, f_in)):
if not line:
continue
...
with open(f'output_{i}.txt', 'w') as f:
f.write(data + "\n")
print(data)

TA貢獻(xiàn)1898條經(jīng)驗(yàn) 獲得超8個(gè)贊
您可以使用open('something.txt', 'w')
. 如果找到該文件,它將刪除其內(nèi)容。否則,它會(huì)創(chuàng)建一個(gè)名為“something.txt”的新文件?,F(xiàn)在,您可以使用它file.write()
來寫您的信息了!

TA貢獻(xiàn)1780條經(jīng)驗(yàn) 獲得超1個(gè)贊
我不確定,如果我理解你的問題是正確的。
我會(huì)創(chuàng)建一個(gè)數(shù)組/列表,并為每個(gè) url 請(qǐng)求和響應(yīng)創(chuàng)建一個(gè)對(duì)象。然后將對(duì)象添加到數(shù)組/列表并為每個(gè)對(duì)象寫入一個(gè)不同的文件。

TA貢獻(xiàn)1784條經(jīng)驗(yàn) 獲得超7個(gè)贊
至少有兩種方法可以為每個(gè) url 生成文件。一個(gè),如下所示,是創(chuàng)建文件的一些數(shù)據(jù)唯一數(shù)據(jù)的散列。在這種情況下,我選擇了類別,但您也可以使用文件的全部?jī)?nèi)容。這將創(chuàng)建一個(gè)用于文件名的唯一字符串,這樣具有相同類別文本的兩個(gè)鏈接在保存時(shí)不會(huì)相互覆蓋。
另一種方法(未顯示)是在數(shù)據(jù)本身中找到一些唯一值,并將其用作文件名而不對(duì)其進(jìn)行哈希處理。然而,這可能會(huì)導(dǎo)致比它解決的問題更多的問題,因?yàn)?Internet 上的數(shù)據(jù)不應(yīng)該被信任。
這是您的代碼,其中包含用于文件名的 MD5 哈希。MD5 不是密碼的安全散列函數(shù),但它可以安全地創(chuàng)建唯一的文件名。
更新的片段
import hashlib
import requests
from bs4 import BeautifulSoup
with open('input.txt', 'r') as f_in:
for line in map(str.strip, f_in):
if not line:
continue
response = requests.get(line)
data = response.text
soup = BeautifulSoup(data, 'html.parser')
categories = soup.find_all("a", {"class":'navlabellink nvoffset nnormal'})
for category in categories:
data = line + "," + category.text
filename = hashlib.sha256()
filename.update(category.text.encode('utf-8'))
with open('{}.html'.format(filename.hexdigest()), 'w') as f:
f.write(data + "\n")
print(data)
添加代碼
filename = hashlib.sha256()
filename.update(category.text.encode('utf-8'))
with open('{}.html'.format(filename.hexdigest()), 'w') as f:
捕獲更新的頁(yè)面
如果您關(guān)心在不同時(shí)間點(diǎn)捕獲頁(yè)面內(nèi)容,請(qǐng)散列文件的全部?jī)?nèi)容。這樣,如果頁(yè)面中的任何內(nèi)容發(fā)生更改,頁(yè)面之前的內(nèi)容都不會(huì)丟失。在這種情況下,我對(duì) url 和文件內(nèi)容進(jìn)行哈希處理,并將哈希值與 URL 哈希值和文件內(nèi)容的哈希值連接起來。這樣,當(dāng)目錄排序時(shí),文件的所有版本都是可見的。
hashed_contents = hashlib.sha256()
hashed_contents.update(category['href'].encode('utf-8'))
with open('{}.html'.format(filename.hexdigest()), 'w') as f:
for category in categories:
data = line + "," + category.text
hashed_url = hashlib.sha256()
hashed_url.update(category['href'].encode('utf-8'))
page = requests.get(category['href'])
hashed_content = hashlib.sha256()
hashed_content.update(page.text.encode('utf-8')
filename = '{}_{}.html'.format(hashed_url.hexdigest(), hashed_content.hexdigest())
with open('{}.html'.format(filename.hexdigest()), 'w') as f:
f.write(data + "\n")
print(data)
添加回答
舉報(bào)