Извлечь ссылки на подстраницы с помощью Looping Python - PullRequest
0 голосов
/ 28 мая 2020

Извлечение ссылок на подстраницы с помощью зацикливания Python

Мне нужно извлечь только ссылки «Далее» внизу всех стандартных страниц «категории А», используя динамик c l oop. Я новичок в 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')

Ответы [ 2 ]

1 голос
/ 28 мая 2020

ок, решил отредактировать свой ответ. так как вы хотите сделать это автоматически, этот код будет получать все "Следующие" URL один за другим, пока не останется ни одного, затем он сохранит их в файл 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> номер страницы

0 голосов
/ 28 мая 2020

@ MaxSmith060, вероятно, прав, но я хотел бы предложить и техническое объяснение.

Я не слишком подробно рассматривал ваш код, но на высоком уровне это то, что я подойдет, если я хочу итеративно получить ссылку для "следующей" страницы.

Сначала проверьте элемент по ссылке:

enter image description here

Затем отфильтруйте до чего-то уникального - class=pagination-container-company выглядит многообещающе.

next_link = "..."

while next_link:
    soup = BeautifulSoup(next_link)

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

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

Простое регулярное выражение группировки для извлечения ссылки, и тогда у вас есть ссылка.

...