python爬广东省人事考试网考试信息
- 获取源码,用requests获取后发现源码不完整,时间信息缺失,换用selenium获取源码
def 获取(url):
browser = webdriver.Chrome()
browser.get(url)
time.sleep(5)
html = browser.page_source
browser.close
return html
2.得到源码后用beautifulsoup4库进行解析,在这之前我们先审查元素查找我们需要的信息,我们发现我们的目标信息均放在class="examList"的tr标签中,如下图
每个标签的信息存储方式都是一致的,因此我们任意打开一个tr标签进行分析
不难发现,名称信息包含在class="name"的a标签中,报名和考试时间包含在四个p标签中,因此用string便可轻松获得目标信息,用循环获取所有考试信息并存入列表中。
def 解析(html):
soup=BeautifulSoup(html,'lxml')
allexams=[]
exams=soup.find_all('tr',class_='examList')
for i in exams:
exam=[]
examname=i.find('a',class_='name')
exam.append(examname.string[6:])
alltimes=i.find_all('p')
for t in alltimes:
exam.append(t.string)
allexams.append(exam)
return allexams
3.用format对目标信息进行简单排版打印出来
def 排版(allexams):
print('{:^30}{:^15}{:^15}{:^15}{:^15}'.format('考试名称','报名开始','报名结束','考试开始','考试结束'))
L=len(allexams)
for i in range(L):
u=allexams[i]
print('{:<30}{:^15}{:^15}{:^15}{:^15}'.format(u[0],u[1],u[2],u[3],u[4]))
或者也可以用openpyxl库将信息存入excel表格中,以获得更好的展示效果。
4.源码如下:
from bs4 import BeautifulSoup
from selenium import webdriver
import time
def 获取(url):
browser=webdriver.Chrome()
browser.get(url)
time.sleep(5)
html=browser.page_source
browser.close()
return html
def 解析(html):
soup=BeautifulSoup(html,'lxml')
allexams=[]
exams=soup.find_all('tr',class_='examList')
for i in exams:
exam=[]
examname=i.find('a',class_='name')
exam.append(examname.string[6:])
alltimes=i.find_all('p')
for t in alltimes:
exam.append(t.string)
allexams.append(exam)
return allexams
def 排版(allexams):
print('{:^25}{:^10}{:^10}{:^15}{:^15}'.format('考试名称','报名开始','报名结束','考试开始','考试结束'))
L=len(allexams)
for i in range(L):
u=allexams[i]
print('{:<25}{:<10}{:<10}{:<15}{:<15}'.format(u[0],u[1],u[2],u[3],u[4]))
def main():
url='http://rsks.gd.gov.cn/wsbs/zyjsryzgks/2020/index.html'
html=获取(url)
allexams=解析(html)
排版(allexams)
if __name__=='__main__':
main()