我想打開一個 txt 檔案(其中包含多個鏈接)并使用 beautifulsoup 報廢標題。我的 txt 檔案包含這樣的鏈接:
https://www.lipsum.com/7845284869/
https://www.lipsum.com/56677788/
https://www.lipsum.com/01127111236/
我的代碼:
import requests as rq
from bs4 import BeautifulSoup as bs
with open('output1.csv', 'w', newline='') as f:
url = open('urls.txt', 'r', encoding='utf8')
request = rq.get(str(url))
soup = bs(request.text, 'html.parser')
title = soup.findAll('title')
pdtitle = {}
for pdtitle in title:
pdtitle.append(pdtitle.text)
f.write(f'{pdtitle}')
我想打開所有 txt 檔案鏈接并從鏈接中洗掉標題。主要問題是在 url 變數中打開 txt 檔案不起作用。如何打開檔案并將資料保存到 csv?
uj5u.com熱心網友回復:
您的代碼不起作用,因為內部 URL 是所有 URL。你需要一一運行:
import requests as rq
from bs4 import BeautifulSoup as bs
with open(r'urls.txt', 'r') as f:
urls = f.readlines()
with open('output1.csv', 'w', newline='') as f:
for url in urls:
request = rq.get(str(url))
soup = bs(request.text, 'html.parser')
title = soup.findAll('title')
pdtitle = {}
for pdtitle in title:
pdtitle.append(pdtitle.text)
f.write(f'{pdtitle}')
uj5u.com熱心網友回復:
您的 url 可能無法正常作業,因為您的 url 正在使用回傳行字符讀取:\n。您需要先洗掉文本,然后再將它們放入串列中。
此外,您正在使用.find_all('title'),這將回傳一個串列,這可能不是您想要的。您可能只想要第一個標題,僅此而已。在這種情況下,.find('title')會更好。我在下面提供了一些可能的更正。
from bs4 import BeautifulSoup
import requests
filepath = '...'
with open(filepath) as f:
urls = [i.strip() for i in f.readlines()]
titles = []
for url in urls:
soup = BeautifulSoup(requests.get(url).content, 'html.parser')
title = soup.find('title') # Note: will find the FIRST title only
titles.append(title.text) # Grabs the TEXT of the title only, removes HTML
new_csv = open('urls.csv', 'w') # Make sure to prepend with desired location, e.g. 'C:/user/name/urls.csv'
for title in titles:
new_csv.write(title '\n') # The '\n' ensures a new row is written
new_csv.close()
f.close()
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/415150.html
標籤:
下一篇:WebScrape互動式地圖坐標
