這是另一個問題的一部分(閱讀來自.CSV URL和追加低于此前刮結果與Python,BeautifulSoup,熊貓),其慷慨地回答@HedgeHog通過,并有助于@QHarr。現在將此部分作為一個單獨的問題發布。
在下面的代碼中,我將 3 個示例源 URL 粘貼到代碼中并且可以正常作業。但是我有一長串要抓取的 URL(1000 ),它們存盤在 .csv 檔案的第一列中(我們稱之為“urls.csv”)。我更愿意直接從該檔案中讀取。
我想我知道“with open”的基本結構(例如@bguest 在下面回答它的方式),但是我在如何將它鏈接到代碼的其余部分時遇到了問題,以便其余部分繼續作業。如何使用 .csv 的迭代讀取替換 URL 串列,以便我將 URL 正確傳遞到代碼中?
import requests
from bs4 import BeautifulSoup
import pandas as pd
urls = ['https://www.marketresearch.com/Infiniti-Research-Limited-v2680/Global-Induction-Hobs-30196623/',
'https://www.marketresearch.com/Infiniti-Research-Limited-v2680/Global-Human-Capital-Management-30196628/',
'https://www.marketresearch.com/Infiniti-Research-Limited-v2680/Global-Probe-Card-30196643/']
data = []
for url in urls:
page = requests.get(url)
soup = BeautifulSoup(page.text, 'html.parser')
toc = soup.find("div", id="toc")
def get_drivers():
data.append({
'url': url,
'type': 'driver',
'list': [x.get_text(strip=True) for x in toc.select('li:-soup-contains-own("Market drivers") li')]
})
get_drivers()
def get_challenges():
data.append({
'url': url,
'type': 'challenges',
'list': [x.get_text(strip=True) for x in toc.select('li:-soup-contains-own("Market challenges") ul li') if
'Table Impact of drivers and challenges' not in x.get_text(strip=True)]
})
get_challenges()
pd.concat([pd.DataFrame(data)[['url', 'type']], pd.DataFrame(pd.DataFrame(data).list.tolist())],
axis=1).to_csv('output.csv')
uj5u.com熱心網友回復:
由于您使用的是熊貓,read_csv將為您解決問題:https : //pandas.pydata.org/docs/reference/api/pandas.read_csv.html
如果你想自己寫,你可以使用內置的 csv 庫
import csv
with open('urls.csv', newline='') as csvfile:
reader = csv.DictReader(csvfile)
for row in reader:
print(row["url"])
編輯:被問及如何使其余代碼使用 csv 中的 url。
首先將網址放在 urls.csv 檔案中
url
https://www.google.com
https://www.facebook.com
現在從 csv 收集網址
import csv
with open('urls.csv', newline='') as csvfile:
reader = csv.DictReader(csvfile)
urls = [row["url"] for row in reader]
# remove the following lines
urls = ['https://www.marketresearch.com/Infiniti-Research-Limited-v2680/Global-Induction-Hobs-30196623/',
'https://www.marketresearch.com/Infiniti-Research-Limited-v2680/Global-Human-Capital-Management-30196628/',
'https://www.marketresearch.com/Infiniti-Research-Limited-v2680/Global-Probe-Card-30196643/']
現在 url 應該被其余??的代碼使用
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/367972.html
上一篇:這個方法是從哪個版本開始實作的?
下一篇:基于布爾列計算具有滾動最大值的列
