首页 > 解决方案 > 通过 Looping Python 提取子页面链接

问题描述

通过 Looping Python 提取子页面链接

我只需要使用动态循环提取所有“A 类”股票页面底部的“下一个”链接。我是 python 新手,但在 VB 中编写了相同的代码并且运行良好。这段代码一定有语法错误,请耐心等待。

帮助将不胜感激。

import requests
from bs4 import BeautifulSoup
import pandas as pd
import re

sub_link=[]
sub_link_edit=[]

 def convert(url):
  if not url.startswith('http://'):
    return 'http:' + url
  return url

next_link = 'https://money.rediff.com/companies/groups/A'

while next_link:
 page = requests.get(next_link)
 soup = BeautifulSoup(page.content,,'html.parser')

 pagination_container_company = soup.find_all("table", class_="pagination- 
 container-company")[0].text

sub_link = re.search('href="(.*)">Next', 
pagination_container_company).group(1)
sub_link_edit.append(convert(sub_link))
next_link=convert(sub_link)

data_df = pd.DataFrame()
df = pd.DataFrame(
 {
    'Link': sub_link_edit
 })
data_df = pd.concat([data_df, df], sort=False)

print(df.shape)
tot_sub=len(sub_link_edit)
print(tot_sub)

data_df.to_csv('results_1.csv')

标签: pythonbeautifulsoup

解决方案


好的,我决定编辑我的答案。由于您想自动执行此操作,因此此代码将一个接一个地获取所有“下一个” URL,直到没有剩余 URL,然后它将它们保存到名为 .csv 的 CSV 文件urls.csv中。

import requests
from bs4 import BeautifulSoup

csv_file = "page number,url\n"
url = "https://money.rediff.com/companies/groups/A"
urls = [url]

while True:
    data = requests.get(url).text

    soup = BeautifulSoup(data, 'html.parser')
    table = soup.find_all(class_="pagination-container-company")[0]
    row = table.find_all("a", text="Next")

    if row:
        url = "https:" + row[0]["href"]
        urls.append(url)
    else:
        break


for index, url in enumerate(urls):
    csv_file += f"{index},{url}\n"

with open("urls.csv", "w") as o:
    o.write(csv_file)

================================

[旧答案] 你真的需要所有这些代码来提取下一页链接吗?每个页面的链接是页面https://money.rediff.com/companies/groups/A/<number>编号<number>的形式


推荐阅读