не удается вычислить сумму строк beautifulsoup

#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())