#python #beautifulsoup
#python #beautifulsoup
Вопрос:
Здравствуйте, я хочу очистить веб-страницу. Я опубликовал свой код, но строка, на которую я нацелился, важна. Это не сработало. Я имею в виду, что ошибки нет, но и вывода нет. Мой код там. Мне нужно суммировать строки, и в этом проблема.
import requests
from bs4 import BeautifulSoup
import pandas as pd
url='http://www.sis.itu.edu.tr/tr/ders_programlari/LSprogramlar/prg.php'
html_content = requests.get(url).text
soup = BeautifulSoup(html_content, "lxml")
url_course_main='http://www.sis.itu.edu.tr/tr/ders_programlari/LSprogramlar/prg.php?fb='
url_course=url_course_main soup.find_all('option')[1].get_text() <---this line
html_content_course=requests.get(a).text
soup_course=BeautifulSoup(html_content_course,'lxml')
for j in soup_course.find_all('td'):
print(j.get_text())
Когда я меняю строку, которую я показал на
url_course=url_course_main 'AKM'
это сработало.
Также soup.find_all('option')[1].get_text()
равно AKM. Можете ли вы догадаться, где ошибка.
Комментарии:
1. Итак, какое значение
a
вы передаете здесьhtml_content_course=requests.get(a).text
2. Строка кода, которую вы выделили, работает просто отлично
3. a — это ‘ sis.itu.edu.tr/tr/ders_programlari/LSprogramlar/prg.php?fb=AKM
Ответ №1:
Вместо requests
модуля попробуйте стандарт Python urllib.request
. Кажется, что у requests
модуля проблема с открытием страницы:
import urllib.request
from bs4 import BeautifulSoup
url='http://www.sis.itu.edu.tr/tr/ders_programlari/LSprogramlar/prg.php'
html_content = urllib.request.urlopen(url).read()
soup = BeautifulSoup(html_content, "lxml")
url_course_main='http://www.sis.itu.edu.tr/tr/ders_programlari/LSprogramlar/prg.php?fb='
url_course=url_course_main soup.find_all('option')[1].get_text()
html_content_course=urllib.request.urlopen(url_course).read()
soup_course=BeautifulSoup(html_content_course,'lxml')
for j in soup_course.find_all('td'):
print(j.get_text(strip=True))
С принтами:
2019-2020 Yaz Dönemi AKM Kodlu Derslerin Ders Programı
...
Комментарии:
1. Кстати: проблема в том, что
get_text()
выдает'AKM '
с пробелом в конце иrequests
отправляет URL с этим пробелом — и сервер не может найти файл'AKM '
с пробелом.2. @furas Хороший улов. Сначала я попытался изменить заголовки, а затем переключился на
urllib
. Интересно, чтоurllib
удаляет это пространство.3. Я также начал со всех заголовков из
DevTool
и позже сSession()
, и я нашел это случайно 🙂
Ответ №2:
Проблема в том, что get_text()
выдает 'AKM '
с пробелом в конце и requests
отправляет URL с этим пробелом — и сервер не может найти файл 'AKM '
с пробелом.
Я использовал ><
в строке '>{}<'.format(param)
, чтобы показать этот пробел — >AKM <
— потому что без ><
это кажется нормальным.
Для удаления этого пробела коду требуется get_text(strip=True)
или get_text().strip()
.
import requests
from bs4 import BeautifulSoup
url = 'http://www.sis.itu.edu.tr/tr/ders_programlari/LSprogramlar/prg.php'
html_content = requests.get(url).text
soup = BeautifulSoup(html_content, 'lxml')
url_course_main = 'http://www.sis.itu.edu.tr/tr/ders_programlari/LSprogramlar/prg.php?fb='
param = soup.find_all('option')[1].get_text()
print('>{}<'.format(param)) # I use `> <` to show spaces
param = soup.find_all('option')[1].get_text(strip=True)
print('>{}<'.format(param)) # I use `> <` to show spaces
url_course = url_course_main param
html_content_course = requests.get(url_course).text
soup_course = BeautifulSoup(html_content_course, 'lxml')
for j in soup_course.find_all('td'):
print(j.get_text())