Извлечь links_Using Python - PullRequest
1 голос
/ 30 мая 2020

Я собираюсь извлечь ссылки, найденные в «Далее» на всех страницах, и добавить их в списки ........................... .................................................. .................................................. ................................ Пожалуйста, помогите мне в этом.

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 ]

0 голосов
/ 31 мая 2020
import pandas as pd
import requests
from bs4 import BeautifulSoup

def convert(url):

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

company_name = []
company_link = []
company_link_edit=[]

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

while sub_link:
  page = requests.get(sub_link)
  soup = BeautifulSoup(page.content, 'html.parser')
  company_A_subpg1 = soup.find_all(class_='dataTable')

  for sub_tab in company_A_subpg1:
    temp = sub_tab.find('tbody')
    all_rows = temp.find_all('tr')
    for val in all_rows:
      a_tag = val.find('a', href=True)
      company_name.append(a_tag.text.strip())
      company_link_edit.append(convert(a_tag.get('href')))

  try:
    sub_link = soup.body.findAll("a", text="Next")[0].get('href')
  except:
    break
  sub_link = convert(sub_link)

print(len(company_name), len(company_link_edit))

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

print(df.shape)

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

вам, вероятно, следует использовать веб-скребок для такого рода проблем, иначе вы не сможете справиться с любым javascript magi c (например, при загрузке страницы) ... хотя в этом случае это может не быть проблемой.

вам также необходимо передать bs4 содержимое страницы, а не весь объект ответа

soup = BeautifulSoup(page.content)

, поскольку вы уже используете bs4 для поиска таблицы, почему бы не использовать его для поиска прямо по интересующей вас ссылке? вот так:

sub_link = soup.body.findAll("a", text="Next")[0].get('href')
...