Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/341.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 带循环的WebScrap和写入csv_Python_Pandas_Csv_Web Scraping_Beautifulsoup - Fatal编程技术网

Python 带循环的WebScrap和写入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

我试图从网站上的多个URL中提取非结构化数据。我使用BeautifulSoup成功地提取了我需要的块。然后,为了帮助构建数据集,我在将值写入csv文件之前将其添加到列表中

但是,当尝试传输数据时,仅传输列表中的最后一个值。我想这是因为每次调用循环时列表都会得到新的值。如何不断向文件中添加新值,使csv文件具有来自每个循环的值?多谢各位

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])