【发布时间】:2022-01-05 09:04:57
【问题描述】:
这是另一个问题 (Reading URLs from .csv and appending scrape results below previous with Python, BeautifulSoup, Pandas) 的一部分,@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')
【问题讨论】:
-
你的意思是
with open(...? -
请edit您的问题并准确发布您的具体问题,作为一个单一的询问声明。不要依赖其他问题中的信息,因为有关 Stack Overflow 的问题必须是独立的。包括指向其他问题的链接仅供参考。一旦你提出了你的问题,请在代码中发布minimal reproducible example,清楚地展示你的问题,以及到目前为止你为解决它所做的努力。如果您的问题只是如何从 CSV 中读取 URL 列表?,请搜索更多答案,因为该网站已多次解决。
-
@MattDMo,谢谢你的笔记。确实没有必要为此阅读另一个问题,但我想认识到其他人在到达这个地方的作用 - 引用的代码显然不是我的全部。我认为展示我到目前为止所做的尝试只会让人感到困惑,因为它显然不起作用——我错过了将 csv 的读取与其余部分联系起来的步骤,并且显示两个不兼容的代码将无济于事。对不起,如果我对规则的理解非常“新手”。
标签: python pandas web-scraping beautifulsoup import-from-csv