从不同行的多个页面中的表中存储和保存数据

时间:2017-09-16 20:08:49

标签: python web-scraping beautifulsoup

我创建了以下代码:

import requests
import pandas as pd
from bs4 import BeautifulSoup

records = []

for factoryId in range(3995, 4000):
    url = "http://www.modon.gov.sa/ar/IndustrialCities/Pages/factory.aspx?
    factoryId=" + str(factoryId)
    r = requests.get(url)
    content = r.text
    soup = BeautifulSoup(content, "html.parser")
    results = soup.find('table', attrs={'class': 'ModonInfoTable'})

    for tr in results.find_all('tr'):
        tds = tr.find_all('td')[1].text
        records.append(tds)

print(records)

factoryId 3995,3996的所需输出:

value1, value2, value3, value4, value5, value6 
value1, value2, value3, value4, value5, value6

我的问题是尝试遍历表格,从第2列(左栏)收集逗号分隔值,然后添加换行符,然后在下一页中抓取下一条记录。

目前,我将所有值附加到列表中,但不能用换行符分隔。

我尝试使用numpy,并使用'\n'.join(records) - 两者都无法获得所需的结果。

最终我将使用pandas将所有值导出为CSV - 这可以轻松完成。

现在唯一的问题是循环记录并正确存储数据。

1 个答案:

答案 0 :(得分:0)

我认为records应该是一个嵌套列表,每个子列表都包含表格单元格,因此当您编写csv文件时,每个html表格的结果都会出现在新行上。

records = []
for factoryId in range(3995, 4000):
    url = "http://www.modon.gov.sa/ar/IndustrialCities/Pages/factory.aspx?factoryId=" + str(factoryId)
    soup = BeautifulSoup(requests.get(url).text, "html.parser")
    results = soup.find('table', attrs={'class': 'ModonInfoTable'})
    records.append([tr.find_all('td')[1].text for tr in results.find_all('tr')])

print(records)