【发布时间】:2021-03-31 15:15:55
【问题描述】:
根据this link 的回答代码,我可以创建一个新列:df['url'] = 'https://www.cspea.com.cn/list/c01/' + df['projectCode']。
下一步我想将url 列的值传递给以下代码,并将所有抓取的内容附加为数据框。
import urllib3
import requests
from bs4 import BeautifulSoup
import pandas as pd
url = "https://www.cspea.com.cn/list/c01/gr2021bj1000186" # url column's values should be passed here one by one
soup = BeautifulSoup(requests.get(url, verify=False).content, "html.parser")
index, data = [], []
for th in soup.select(".project-detail-left th"):
h = th.get_text(strip=True)
t = th.find_next("td").get_text(strip=True)
index.append(h)
data.append(t)
df = pd.DataFrame(data, index=index, columns=["value"])
print(df)
我如何在 Python 中做到这一点?谢谢。
更新:
import requests
from bs4 import BeautifulSoup
import pandas as pd
df = pd.read_excel('items_scraped.xlsx')
data = []
urls = df.url.tolist()
for url_link in urls:
url = url_link
# url = "https://www.cspea.com.cn/list/c01/gr2021bj1000186"
soup = BeautifulSoup(requests.get(url, verify=False).content, "html.parser")
index, data = [], []
for th in soup.select(".project-detail-left th"):
h = th.get_text(strip=True)
t = th.find_next("td").get_text(strip=True)
index.append(h)
data.append(t)
df = pd.DataFrame(data, index=index, columns=["value"])
df = df.T
df.reset_index(drop=True, inplace=True)
print(df)
df.to_excel('result.xlsx', index = False)
但它只将一行保存到excel文件中。
【问题讨论】:
-
假设您的其余代码是正确的,您需要将循环内的 df 附加到全局列表,然后在循环外的该列表上调用 pd.concat。目前,您只在每次覆盖 df 时使用最后一次迭代。有很多现有的问题涵盖了这一点,
-
对不起,我不明白,你能编辑我的代码吗?
标签: python-3.x web-scraping beautifulsoup python-requests web-crawler