[英]Write multiple files inside for-loop
我正在嘗試抓取幾個鏈接,提取在<p>
HTML 標記上找到的文本,並將 output 寫入不同的文件。 每個鏈接都應該有自己的 output 文件。 至今:
#!/usr/bin/python
# -*- coding: utf-8 -*-
from urllib.request import Request, urlopen
from bs4 import BeautifulSoup
import re
import csv
import pyperclip
import pprint
import requests
urls = ['https://link1',
'https://link2']
url_list = list(urls)
#scrape elements
for url in urls:
response = requests.get(url, headers={'User-Agent': 'Mozilla/5.0'})
soup = BeautifulSoup(response.content, "html.parser")
page = soup.find_all('p')
page = soup.getText()
for line in urls:
with open('filename{}.txt'.format(line), 'w', encoding="utf8") as outfile:
outfile.write('\n'.join([i for i in page.split('\n') if len(i) > 0]))
我收到OSError: [Errno 22] Invalid argument: filenamehttps://link1
如果我把我的代碼改成這個
for index, line in enumerate(urls):
with open('filename{}.txt'.format(index), 'w', encoding="utf8") as outfile:
outfile.write('\n'.join([i for i in page.split('\n') if len(i) > 0]))
腳本運行,但出現語義錯誤; output 文件都包含從鏈接 2 中提取的文本。 我猜第二個 for 循環就是這樣做的。
我已經研究了 S/O 以獲得類似的1 個答案,但我無法弄清楚。
我猜你在某種*nix
系統上,因為錯誤與/
解釋了路徑的一部分有關。
因此,您必須做一些事情來正確命名文件或創建要保存 output 的路徑。
話雖如此,由於上述錯誤,使用URL
作為文件名並不是一個好主意。
您可以將/
替換為,比如_
,或者只是以不同的方式命名您的文件。
另外,這個:
urls = ['https://link1',
'https://link2']
已經是一個列表,所以不需要這個:
url_list = list(urls)
並且不需要兩個for loops
。 您可以在從列表中抓取URLS
時寫入文件。
這是一些虛擬網站的工作代碼:
#!/usr/bin/python
# -*- coding: utf-8 -*-
import requests
from bs4 import BeautifulSoup
urls = ['https://lipsum.com/', 'https://de.lipsum.com/']
for url in urls:
response = requests.get(url, headers={'User-Agent': 'Mozilla/5.0'})
soup = BeautifulSoup(response.content, "html.parser")
page = soup.find("div", {"id": "Panes"}).find("p").getText()
with open('filename_{}.txt'.format(url.replace("/", "_")), 'w', encoding="utf8") as outfile:
outfile.write('\n'.join([i for i in page.split('\n') if len(i) > 0]))
您也可以將您的方法與enumerate()
一起使用:
import requests
from bs4 import BeautifulSoup
urls = ['https://lipsum.com/', 'https://de.lipsum.com/']
for index, url in enumerate(urls, start=1):
response = requests.get(url, headers={'User-Agent': 'Mozilla/5.0'})
soup = BeautifulSoup(response.content, "html.parser")
page = soup.find("div", {"id": "Panes"}).find("p").getText()
with open('filename_{}.txt'.format(index), 'w', encoding="utf8") as outfile:
outfile.write('\n'.join([i for i in page.split('\n') if len(i) > 0]))
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.