Я просмотрел некоторые учебники и прочитал книгу об основах beautifulsoup, написал этот скребок, но не могу заставить его циклически перемещаться по URL-адресам a-z или просматривать страницы. Для этого проекта я очищаю веб-сайт. И я хочу, чтобы у него было царапины A-Z, а не только результаты страницы A.Как создать строки url в beautifulsoup
код ниже работал до тех пор, пока я пытался получить его для создания последней буквы строки -
Здесь НИЖЕ моя НЕ работает код - моя попытка построения строки URL. В идеале я хотел бы извлечь из файла или предопределенного списка, а также детские шаги.
import urllib
import urllib.request
from bs4 import BeautifulSoup
import os
from string import ascii_lowercase
def make_soup(url):
thepage = urllib.request.urlopen(url)
soupdata = BeautifulSoup(thepage, "html.parser")
return soupdata
playerdatasaved=""
for letter in ascii_lowercase:
soup = make_soup("http://www.basketball-reference.com/players/" + letter + "/")
for record in soup.find_all("tr"):
playerdata=""
for data in record.findAll("td"):
playerdata=playerdata+","+data.text
if len(playerdata)!=0:
playerdatasaved = playerdatasaved + "\n" + playerdata[1:]
header="Player,From,To,Pos,Ht,Wt,Birth Date,College"
file = open(os.path.expanduser("Basketball.csv"),"wb")
file.write(bytes(header, encoding="ascii",errors="ignore"))
file.write(bytes(playerdatasaved, encoding="ascii",errors="ignore"))
print(letter)
print(playerdatasaved)
МОИ ОШИБКИ НИЖЕ ---------------------
Traceback (most recent call last):
File "C:/Python36/web_scraper_tutorial/multiple_url_2.py", line 15, in <module>
soup = make_soup("http://www.basketball-reference.com/players/" + letter + "/")
File "C:/Python36/web_scraper_tutorial/multiple_url_2.py", line 8, in make_soup
thepage = urllib.request.urlopen(url)
File "C:\Python36\lib\urllib\request.py", line 223, in urlopen
return opener.open(url, data, timeout)
File "C:\Python36\lib\urllib\request.py", line 532, in open
response = meth(req, response)
File "C:\Python36\lib\urllib\request.py", line 642, in http_response
'http', request, response, code, msg, hdrs)
File "C:\Python36\lib\urllib\request.py", line 564, in error
result = self._call_chain(*args)
File "C:\Python36\lib\urllib\request.py", line 504, in _call_chain
result = func(*args)
File "C:\Python36\lib\urllib\request.py", line 756, in http_error_302
return self.parent.open(new, timeout=req.timeout)
File "C:\Python36\lib\urllib\request.py", line 532, in open
response = meth(req, response)
File "C:\Python36\lib\urllib\request.py", line 642, in http_response
'http', request, response, code, msg, hdrs)
File "C:\Python36\lib\urllib\request.py", line 570, in error
return self._call_chain(*args)
File "C:\Python36\lib\urllib\request.py", line 504, in _call_chain
result = func(*args)
File "C:\Python36\lib\urllib\request.py", line 650, in http_error_default
raise HTTPError(req.full_url, code, msg, hdrs, fp)
urllib.error.HTTPError: HTTP Error 404: Not Found
Любой дать мне некоторую помощь или совет ?
ниже рабочая версия только для одной страницы - мне нужно, чтобы она ползала по нескольким.
import urllib
import urllib.request
from bs4 import BeautifulSoup
import os
def make_soup(url):
thepage = urllib.request.urlopen(url)
soupdata = BeautifulSoup(thepage, "html.parser")
return soupdata
playerdatasaved=""
soup = make_soup("http://www.basketball-reference.com/players/a/")
for record in soup.find_all("tr"):
playerdata = ""
for data in record.findAll("td"):
playerdata=playerdata+","+data.text
playerdatasaved = playerdatasaved + "\n" + playerdata[1:]
header="Player,From,To,Pos,Ht,Wt,Birth Date,College"+"\n"
file = open(os.path.expanduser("Basketball.csv"),"wb")
file.write(bytes(header, encoding="ascii",errors="ignore"))
file.write(bytes(playerdatasaved, encoding="ascii",errors="ignore"))
print(playerdatasaved)
ошибка говорит, что ответ с этим URL не найден, поэтому вы генерируете URL-адрес, недоступный на соответствующем сервере. – eLRuLL
Я так понял, но можете ли вы сказать мне, почему? любой url с a-z должен быть действительным - что не так с тем, как у меня есть эта настройка? Я опубликовал первую версию сканирования одного URL-адреса - нужно несколько. – Drazziwac
Я не могу сказать вам, почему сервер решает работать так, как планировал их программист. Также в вашем примере это выглядит так: «X» недоступен (404) – eLRuLL