L oop по разным ссылкам на сайте и соскребать определенную информацию - PullRequest
1 голос
/ 26 января 2020

Добрый день всем, я надеюсь, что кто-нибудь может помочь мне с проблемой, связанной с циклическим просмотром нескольких ссылок на веб-сайте. Большое спасибо в ожидании вашей помощи. У меня есть этот код ниже, который получает необходимую мне информацию из первой ссылки и создает df, мне нужно представить ее. Но на сайте более 6 ссылок, и я не уверен, как об этом узнать go.

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
#matplotlib inline 
from urllib.request import urlopen
from bs4 import BeautifulSoup 
url = "https://auctions.royaltyexchange.com/auctions_overview/"
html = urlopen("https://auctions.royaltyexchange.com/auctions/jay-zs-multi-platinum-empire-state-of-mind/?origin=overview&filter_value=overview") 

soup = BeautifulSoup(html, 'lxml')
type(soup) 
# Get the title
title = soup.title

title = soup.find('h1', class_='title -auction-page -dark').text.strip()
title
data = {'Name':['Title',title]}

df_title = pd.DataFrame(data)

irr = soup.find('span',attrs={'id':'current-irr'}).text.strip()
irr
data = {'value' : ['theoretical IRR',irr]}
df_irr = pd.DataFrame(data)

table = soup.find('table', class_='es-overview-table')
table_rows = table.find_all('tr')

res = []
for tr in table_rows:
    td = tr.find_all('td')
    row = [tr.text.strip() for tr in td if tr.text.strip()]
    if row:
        res.append(row)

df_table = pd.DataFrame(pd.DataFrame(res).transpose())

df_final = pd.concat([df_title,df_irr ,df_table], axis=1, ignore_index = True)
df_final.head()

Ответы [ 2 ]

0 голосов
/ 27 января 2020

Небольшой рефакторинг @yganalyst и вашего кода:

import pandas as pd
import re
from urllib.request import urlopen
from bs4 import BeautifulSoup


def get_link(page_num, raw_url):
    link_ls = []
    for page in range(1, page_num+1):
        url = raw_url + "auctions_overview/?origin=overview&page=" + str(page)

        html = urlopen(url)
        bs = BeautifulSoup(html, 'html.parser')

        pobj = re.compile("^(/auctions/)")
        for link in bs.find('div', {'class': '-list'}).findAll('a', href=pobj):
            link_ls.append(raw_url + link.attrs['href'])
    return link_ls


def extract_auction(url2):
    data = {}
    html = urlopen(url2)
    soup = BeautifulSoup(html, 'lxml')

    title = soup.find('h1', class_='title -auction-page -dark').text.strip()
    data['Title'] = title

    irr = soup.find('span', attrs={'id': 'current-irr'}).text.strip()
    data['theoretical IRR'] = irr

    table = soup.find('table', class_='es-overview-table')
    table_rows = table.find_all('tr')
    for tr in table_rows:
        td = tr.find_all('td')
        row = [tr.text.strip() for tr in td if tr.text.strip()]
        if row:
            key = row[0].replace(':', '')
            data[key] = row[1]
    return data


base_url = "https://auctions.royaltyexchange.com/"
page_num = 1
link_list = get_link(page_num, base_url)

data = []
for ll in link_list:
    print(ll)
    data.append(extract_auction(ll))

df_final = pd.DataFrame(data)
0 голосов
/ 26 января 2020

Вы можете использовать это, чтобы получить все ссылки в первую очередь на всех страницах.

from urllib.request import urlopen
import re 
from bs4 import BeautifulSoup 

raw_url = "https://auctions.royaltyexchange.com/"
def get_link(page_num):
    global raw_url
    link_ls = []
    for page in range(1,page_num+1):
        url = "https://auctions.royaltyexchange.com/auctions_overview/?origin=overview&page=" + str(page)
        html = urlopen(url) 
        bs = BeautifulSoup(html, 'html.parser')

        for link in bs.find('div',{'class':'-list'}).findAll('a',href=re.compile("^(/auctions/)")):
            print(link.attrs['href'])
            link_ls.append(raw_url + link.attrs['href'])
    return link_ls

link_list = get_link(55) # the last page number

link_list

['https://auctions.royaltyexchange.com//auctions/hip-hop-royalties-danileighs-lil-bebe/?origin=overview&filter_value=overview',
 'https://auctions.royaltyexchange.com//auctions/k-pop-publishing-featuring-exo-and-tvxq/?origin=overview&filter_value=overview',
 'https://auctions.royaltyexchange.com//auctions/jay-zs-multi-platinum-empire-state-of-mind/?origin=overview&filter_value=overview',
 'https://auctions.royaltyexchange.com//auctions/film-royalties-classic-comedy-trading-places/?origin=overview&filter_value=overview',
 'https://auctions.royaltyexchange.com//auctions/ben-jerrys-cherry-garcia-trademark-royalties/?origin=overview&filter_value=overview',
 'https://auctions.royaltyexchange.com//auctions/the-doobie-brothers-black-water-more/?origin=overview&filter_value=overview',
 'https://auctions.royaltyexchange.com//auctions/dirty-dancings-ive-had-the-time-of-my-life/?origin=overview&filter_value=overview',
 'https://auctions.royaltyexchange.com//auctions/multi-platinum-hip-hop-collection/?origin=overview&filter_value=overview',
...

На каждой странице укажите данные, которые вы хотите извлечь (например, название, имя и т. Д. c.) И укажите тип данных.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...