Составьте список всех страниц сайта в Python - PullRequest
0 голосов
/ 27 апреля 2018

Я пытаюсь перечислить все страницы сайта в Python для очистки с помощью BeautifulSoup. То, что у меня сейчас есть, это:

team_urls = ['http://www.lyricsfreak.com/e/ed+sheeran/thinking+out+loud_21083784.html',
            'http://www.lyricsfreak.com/e/ed+sheeran/photograph_21058341.html',
            'http://www.lyricsfreak.com/e/ed+sheeran/a+team_20983411.html',
            'http://www.lyricsfreak.com/e/ed+sheeran/i+see+fire_21071421.html',
            'http://www.lyricsfreak.com/e/ed+sheeran/perfect_21113253.html',
            'http://www.lyricsfreak.com/e/ed+sheeran/castle+on+the+hill_21112527.html',
            'http://www.lyricsfreak.com/e/ed+sheeran/supermarket+flowers_21113249.html',
            'http://www.lyricsfreak.com/e/ed+sheeran/lego+house_20983415.html',
            'http://www.lyricsfreak.com/e/ed+sheeran/even+my+dad+does+sometimes_21085123.html',
            'http://www.lyricsfreak.com/e/ed+sheeran/kiss+me_20983414.html',
            'http://www.lyricsfreak.com/e/ed+sheeran/shape+of+you_21113143.html',
            'http://www.lyricsfreak.com/e/ed+sheeran/i+see+fire_21071421.html'
]

Я хотел бы вызвать функцию для извлечения всех сайтов, начиная с http://www.lyricsfreak.com/e/ed+sheeran/, так как я знаю, что текущий список небрежный, и есть еще около 30 доступных, которые я бы не хотел добавлять вручную.

1 Ответ

0 голосов
/ 29 апреля 2018

В Python 2.x вы можете создать свой список поддоменов следующим образом:

from bs4 import BeautifulSoup    
import urllib2 

base_url = 'http://www.lyricsfreak.com' 
request = urllib2.Request(base_url + '/e/ed+sheeran/', headers={'User-Agent':'Mozilla/5.0 (Windows NT 6.1; Win64; x64)'})
response = urllib2.urlopen(request)
soup = BeautifulSoup(response.read(), 'html.parser')

urls = []

for tr in soup.select('tbody tr'):
    urls.append(base_url + tr.td.a['href'])

print urls

Это создаст urls список, начинающийся с:

['http://www.lyricsfreak.com/e/ed+sheeran/a+team_20983411.html', 'http://www.lyricsfreak.com/e/ed+sheeran/afire+love_21084845.html', ...

В Python 3.x это можно изменить следующим образом:

from bs4 import BeautifulSoup    
import urllib    

base_url = 'http://www.lyricsfreak.com' 
resp = urllib.request.urlopen(base_url + '/e/ed+sheeran/')
soup = BeautifulSoup(resp, 'html.parser')

urls = []

for tr in soup.select('tbody tr'):
    urls.append(base_url + tr.td.a['href'])

print(urls)

Или используйте библиотеку requests следующим образом:

from bs4 import BeautifulSoup    
import requests

base_url = 'http://www.lyricsfreak.com' 
response = requests.get(base_url + '/e/ed+sheeran/')
soup = BeautifulSoup(response.text, 'html.parser')

urls = []

for tr in soup.select('tbody tr'):
    urls.append(base_url + tr.td.a['href'])

Установка с использованием:

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