您好,我想抓取一个网页。我发布了代码,但是我所针对的行很重要。它不起作用。我的意思是没有错误,但也没有输出。我的代码在那里。我需要对字符串求和,这就是问题所在。
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。
你能猜出错误在哪里吗?
答案 0 :(得分:2)
尝试使用Python的标准requests
代替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 :(得分:1)
问题是get_text()
在'AKM '
的末尾提供了空格,而requests
在URL中发送了该空格-服务器无法找到有空格的文件'AKM '
。 / p>
我在字符串><
中使用了'>{}<'.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())