Как я могу получить hrefs от hrefs? - PullRequest
0 голосов
/ 23 ноября 2018

Как мне получить hrefs от hrefs, используя Python в формате класса и метода?Я пробовал:

root_url = 'https://www.iea.org'

class IEAData:
       def __init__(self):
             try:--
             except:


       def get_links(self, url):
            all_links = []
            page = requests.get(root_url)
            soup = BeautifulSoup(page.text, 'html.parser')
            for href in soup.find_all(class_='omrlist'):
               all_links.append(root_url + href.find('a').get('href'))
            return all_links
            #print(all_links)

iea_obj = IEAData()
yearLinks = iea_obj.get_links(root_url + '/oilmarketreport/reports/')

reportLinks = []

for url in yearLinks:
    links =iea_obj.get_links(yearLinks)
    print(links)

Рекомендовано: переменная ссылки должна иметь все месячные hrefs, но не получает, поэтому, пожалуйста, скажите мне, как я должен это сделать.

Ответы [ 2 ]

0 голосов
/ 23 ноября 2018

Я довольно новичок в программировании, и я все еще учусь и пытаюсь понять, как классы и все такое работают вместе.Но дал ему шанс (вот как мы учимся, верно?)

Не уверен, что это то, что вы ищете в качестве результата.Я изменил 2 вещи и смог поместить все ссылки из YearLinks в список.Обратите внимание, что он также будет включать ссылки в формате PDF и ссылки за месяцы, которые, я думаю, вам нужны.Если вам не нужны эти PDF-ссылки, а исключительно месяцы, просто не включайте pdf.

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

root_url = 'https://www.iea.org'


class IEAData:

    def get_links(self, url):

       all_links = []
       page = requests.get(url)
       soup = bs4.BeautifulSoup(page.text, 'html.parser')
       for href in soup.find_all(class_='omrlist'):
           all_links.append(root_url + href.find('a').get('href'))
       return all_links
       #print(all_links)


iea_obj = IEAData()
yearLinks = iea_obj.get_links(root_url + '/oilmarketreport/reports/')

reportLinks = []

for url in yearLinks:
    links = iea_obj.get_links(url)

    # uncomment line below if you do not want the .pdf links
    #links = [ x for x in links if ".pdf" not in x ]
    reportLinks += links
0 голосов
/ 23 ноября 2018

Было несколько проблем с вашим кодом.Ваша функция get_links() не использовала url, который был ей передан.При циклическом возврате по возвращенным ссылкам вы передаете yearLinks, а не url.

. Следующее должно помочь вам:

from bs4 import BeautifulSoup                        
import requests

root_url = 'https://www.iea.org'

class IEAData:
    def get_links(self, url):
        all_links = []
        page = requests.get(url)
        soup = BeautifulSoup(page.text, 'html.parser')

        for li in soup.find_all(class_='omrlist'):
           all_links.append(root_url + li.find('a').get('href'))
        return all_links

iea_obj = IEAData()
yearLinks = iea_obj.get_links(root_url + '/oilmarketreport/reports/')

for url in yearLinks:
    links = iea_obj.get_links(url)
    print(url, links)

Это даст вам начало вывода:

https://www.iea.org/oilmarketreport/reports/2018/ ['https://www.iea.org/oilmarketreport/reports/2018/0118/', 'https://www.iea.org/oilmarketreport/reports/2018/0218/', 'https://www.iea.org/oilmarketreport/reports/2018/0318/', 'https://www.iea.org/oilmarketreport/reports/2018/0418/', 'https://www.iea.org/oilmarketreport/reports/2018/0518/', 'https://www.iea.org/oilmarketreport/reports/2018/0618/', 'https://www.iea.org/oilmarketreport/reports/2018/0718/', 'https://www.iea.org/oilmarketreport/reports/2018/0818/', 'https://www.iea.org/oilmarketreport/reports/2018/1018/']
https://www.iea.org/oilmarketreport/reports/2017/ ['https://www.iea.org/oilmarketreport/reports/2017/0117/', 'https://www.iea.org/oilmarketreport/reports/2017/0217/', 'https://www.iea.org/oilmarketreport/reports/2017/0317/', 'https://www.iea.org/oilmarketreport/reports/2017/0417/', 'https://www.iea.org/oilmarketreport/reports/2017/0517/', 'https://www.iea.org/oilmarketreport/reports/2017/0617/', 'https://www.iea.org/oilmarketreport/reports/2017/0717/', 'https://www.iea.org/oilmarketreport/reports/2017/0817/', 'https://www.iea.org/oilmarketreport/reports/2017/0917/', 'https://www.iea.org/oilmarketreport/reports/2017/1017/', 'https://www.iea.org/oilmarketreport/reports/2017/1117/', 'https://www.iea.org/oilmarketreport/reports/2017/1217/']
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...