python - 无法弄清楚我的条件有什么问题
问题描述
这是一个网络爬虫代码,我正在运行将我所有的大学模块移植到 csv 文件中,我无法理解为什么我的 if/else 语句不起作用,尝试了许多不同的解决方案,但仍然没有运气。也许我错过了什么?这是代码(条件在底部):
from bs4 import BeautifulSoup, BeautifulStoneSoup
# import requests
import csv
with open('timetable.html', encoding='UTF-8', newline='') as html_file:
soup = BeautifulSoup(html_file, 'lxml')
csv_file = open('lol.csv', 'w', encoding='utf-8')
csv_writer = csv.writer(csv_file)
csv_writer.writerow(['Subject', 'Start date', 'Start time', 'End time', 'Location'])
table = soup.find('table')
for modulis in table.find_all('td', class_='modclass'):
# randam modulį
# randam modulio pavadinimą
pav = modulis.find_all('a')[1]
name = pav['title']
print(name)
# modulio laiko pradžia
time1 = modulis.text[0:5]
print(time1)
# modulio laiko pabaiga
time2 = modulis.text[6:11]
print(time2)
# modulio vieta
aud = modulis.find('a').text[1:]
print(aud)
# modulio data
data = modulis.parent.find('td', class_='date').text
if data[0] == 0:
rand = '2019.' + data
else:
rand = '2018.' + data
# rašom csv
print(rand)
csv_writer.writerow([name, rand, time1, time2, aud])
它永远不会评估为真,所以它总是进入 else 语句 ant 输入错误的年份。我所有的日期都以 2018.xx.xx 结尾,但是以 0 开头的这些月份应该以 2019.xx.xx 开头
此外,数据始终采用 xx.xx 格式,因此 data[0] 始终选择第一个数字。
解决方案
您设置data
为文本,然后将其评估为 int。只需将其更改为“0”,它应该可以工作。
...
data = modulis.parent.find('td', class_='date').text
if data[0] == '0':
rand = '2019.' + data
else:
rand = '2018.' + data
...
推荐阅读
- reactjs - 我可以在我的网站上的两个不同路径上托管相同的 React 应用程序吗?
- java - 当我在平板电脑上运行应用程序时,Android Studio 中的按钮看起来很乱
- c# - 如何在可观察到的“时间后重置”中修复竞争条件?
- php - 故意不捕捉异常
- buffer - 在 GeoDMS 中,我试图缓冲一个多边形,但出现错误
- reactjs - 如何通过导出在非索引文件中渲染 react-data-grid?
- javascript - 如何将秒转换为分钟和秒?
- python - 正则表达式分组直到空格
- java - selenium webdriver中的警报后如何处理基于窗口的弹出窗口?
- python - 需要帮助改进代码以运行 for 循环以汇总 csv 文件中的经济变量?