Python 带循环的WebScrap和写入csv
我试图从网站上的多个URL中提取非结构化数据。我使用BeautifulSoup成功地提取了我需要的块。然后,为了帮助构建数据集,我在将值写入csv文件之前将其添加到列表中 但是,当尝试传输数据时,仅传输列表中的最后一个值。我想这是因为每次调用循环时列表都会得到新的值。如何不断向文件中添加新值,使csv文件具有来自每个循环的值?多谢各位Python 带循环的WebScrap和写入csv,python,pandas,csv,web-scraping,beautifulsoup,Python,Pandas,Csv,Web Scraping,Beautifulsoup,我试图从网站上的多个URL中提取非结构化数据。我使用BeautifulSoup成功地提取了我需要的块。然后,为了帮助构建数据集,我在将值写入csv文件之前将其添加到列表中 但是,当尝试传输数据时,仅传输列表中的最后一个值。我想这是因为每次调用循环时列表都会得到新的值。如何不断向文件中添加新值,使csv文件具有来自每个循环的值?多谢各位 for i in range(1, 3): url = "https://website.com/webid={}".format(i
for i in range(1, 3):
url = "https://website.com/webid={}".format(i)
s = session.get(url, headers=headers, cookies=cookies)
soup = bs(s.text, 'html.parser')
data = soup.find_all('td')
t = soup.find_all('td')
a = t[0]
b = t[1]
c = t[2]
info = [a, b, c]
print(info)
df = pd.DataFrame(info)
df.to_csv('a.csv', index=False, header=False)
回复评论和其他答案:
如果我的原始代码块不清楚,我道歉,我正在尝试生成最低限度的必要代码来解释我的情况。幸运的是@Matt_F能够理解并引导我走向正确的方向。对于那些想要更明确地解释我正在运行的代码的人,请参阅下面我的完整代码块(没有导入、cookie、头和负载)
我相信您的问题是,您正在以写入模式(默认模式)打开csv文件。您应该使用“a”属性以“append”模式打开它
df.to_csv('a.csv', mode='a', index=False, header=False)
在旁注上-代码如下:
a = t[0]
b = t[1]
c = t[2]
d = t[3]
e = t[4]
作为python初学者,这样的代码对我来说相当困难
我一直在思考这个设计:我们不应该使用数据结构来表示您的数据吗。
将列表中的元素指定给名称,然后从中创建一个新列表
所以我猜你的数据是二维的。
第一个维度是索引(行)和第二个维度是列(td数据) 我已经了解到,我们必须创建一个空列表,这是以后的整个数据集。 对于每个标记,您需要文本或属性。将整个标记对象放入pandas将不起作用
td_results = []
for i in range(1, 100):
url = "https://my-website.com/webid={}".format(i)
s = session.get(url, headers=headers, cookies=cookies)
soup = bs(s.text, 'html.parser')
data = soup.find_all('td')
td_results.append(column.text for column in soup.find_all('td')) # <- this here is the critical part
# he could find something or not
# and the amount of td elements can be different
print(td_results)
df = pdDataFrame(td_results)
你觉得这些沉思怎么样!?期待收到您的来信您在哪里申报
信息
?您好,亲爱的Bjørn_Jung-非常感谢这个伟大的例子;我目前对python、csv和pandas的所有事物都很了解。我喜欢你的例子。你能提供一个网址,我们可以运行这个伟大的和cristal清晰的演示代码。那太好了。很高兴收到你的来信。问候;)非常感谢亲爱的Matt为您提供了非常好的答案-这非常有帮助。我很高兴看到这条线!
td_results = []
for i in range(1, 100):
url = "https://my-website.com/webid={}".format(i)
s = session.get(url, headers=headers, cookies=cookies)
soup = bs(s.text, 'html.parser')
data = soup.find_all('td')
td_results.append(column.text for column in soup.find_all('td')) # <- this here is the critical part
# he could find something or not
# and the amount of td elements can be different
print(td_results)
df = pdDataFrame(td_results)
td_results.append(column.text for column in soup.find_all('td')[:10])