如何从不同页面提取表? (蟒蛇)

时间:2019-09-25 08:29:54

标签: python-3.x beautifulsoup

我想提取http://

上第一服务页面的表格

这些表格已被下面的代码抓取,并在列表中,     导入urllib     从bs4导入BeautifulSoup

base_url = "http://"
url_list = ["{}?page={}".format(base_url, str(page)) for page in range(1, 21)]

mega = []
for url in url_list:
    html = urllib.request.urlopen(url).read()
    soup = BeautifulSoup(html, 'html.parser')
    table = soup.find('table', {'class': 'table table-bordered table-striped table-hover'}) 
    mega.append(table)

因为它是一个列表,不能使用'soup find_all'提取我想要的项目,所以我将它们转换为bs4.element.Tag以进一步搜索项目

for i in mega:
    trs = table.find_all('tr')[1:]
    rows = list()
    for tr in trs:
        rows.append([td.text.replace('\n', '').replace('\xa0', '').replace('\t', '').strip().rstrip() for td in tr.find_all('td')])
rows

这些行仅提取最后一页的表。我的代码有什么问题,因此无法提取前面的19个表?谢谢!

这两个项目的长度不相等。我在meaga中用i来获得i。

len(mega) = 20
len(i) = 5

1 个答案:

答案 0 :(得分:1)

问题很简单。 在此for循环中:

for i in mega:
    trs = table.find_all('tr')[1:]
    rows = list()
    for tr in trs:
        rows.append([td.text.replace('\n', '').replace('\xa0', '').replace('\t', '').strip().rstrip() for td in tr.find_all('td')])

您可以在for循环中初始化rows = list()。因此,您循环了21次,但同时也清空了列表20次。

因此,您需要像这样:

rows = list()
for i in mega:
    trs = table.find_all('tr')[1:]
    for tr in trs:
        rows.append([td.text.replace('\n', '').replace('\xa0', '').replace('\t', '').strip().rstrip() for td in tr.find_all('td')])