利用selenium库爬取学校官网通告


提示:写完文章后,目录可以自动生成,如何生成可参考右边的帮助文档


前言

提示:这里可以添加本文要记录的大概内容:

随着互联网的快速发展,世界上涌现出了大量的数据,所以这时候爬虫技术也相应出现。我这篇文章写的是对selenium库的应用,怎么定位标签,获取元素。下面是以本校的官网为例子,爬取通告。


一、爬取步骤

1.初始化

代码如下(示例):
option = ChromeOptions()
option.add_experimental_option(‘excludeSwitches’, [‘enable-automation’])
option.add_argument(“–no-sandbox”)
option.add_argument(“–lang=zh-CN”)
driver = webdriver.Chrome(options=option, executable_path=r’E:\1.爬虫需求\009.爬取数据保存到xlsx\chromedriver.exe’)
url = ‘http://jwc.hut.edu.cn/tzgg.htm’

2.分析页面,爬取数据

2.1 确定要爬取的网址
我们通过分析网址构成,发现不同的页数变的只有数值,而且规律是逐渐递减的,从20到1。
代码如下

# 通告页面有21页,通过分析发现从第二页起,是从20到1构建的
url_list = [url]
for page in range(20, 1, -1):
    page_url = f'https://www.bjut.edu.cn/tzgg/{page}.htm'
    url_list.append(page_url)

2.2 爬取数据

list = []
for url in url_list:
    driver.get(url)
    time.sleep(1)
    etree = html.etree
    resp1 = driver.page_source
    tree1 = etree.HTML(resp1)
    lis1 = tree1.xpath('/html/body/table[3]/tbody/tr/td[2]/table/tbody/tr[4]/td/div/ul[1]/li')
    lis2 = []
    # 因为只有奇数次序的标签才是通告的,所有取所有奇数个
    for j in range(1, len(lis1), 2):
        lis2.append(lis1[j])
    for li in lis2:
        dic = {}
        # 时间
        date = li.xpath('./span/text()')[0]
        # 网址
        detail = li.xpath('./a/@href')[0]
        detail_url = 'http://jwc.hut.edu.cn/' + detail
        driver.get(detail_url)
        time.sleep(1)
        # 标题
        try:
            title = driver.find_element(By.XPATH, '/html/body/table[3]/tbody/tr/td[2]/table/tbody/tr[3]/td/div/div/form/h1').text
        except:
            continue

        # 正文内容
        content = driver.find_element(By.XPATH, '/html/body/table[3]/tbody/tr/td[2]/table/tbody/tr[3]/td/div/div/form/div[2]/div/div').text
        content = content.replace('\n', '')
        # 写入字典
        dic['title'] = title
        dic['date'] = date
        dic['url'] = detail_url
        dic['content'] = content
        print(dic)
        list.append(dic)

我们循环爬取列表中的网址,发现通告内容都是在二级页面的,而且二级页面的网址可以在一级页面中获取,在这里获取时间的话我为了方便是从一级页面获取的,得到二级页面的url后,我们可以通过selenium访问,按下F12,我们可以通过鼠标点击确定想要的信息。这里我们用的是字典结构存储数据,包括时间、标题、正文url、正文等。

3.数据保存到excel

写入xlsx

# 写入xlsx
def write_xlsx(list_a, filenames_xlsx):
    header = ['title', 'date', 'url', 'content']
    with open(filenames_xlsx, 'w+', encoding='utf-8') as f:
        pass
    df = pd.read_csv(filenames_xlsx, header=None, names=header)
    df.to_excel(filenames_xlsx)
    list_d = []
    for ele in list_a:
        dict_w = {
            'title': ele['title'],
            'date': ele['date'],
            'url': ele['url'],
            'content': ele['content']
        }
        list_d.append(dict_w)
    pd.DataFrame(list_d).to_excel(filenames_xlsx, encoding="utf-8", index=False,
                                  header=['title', 'date', 'url', 'content'])

我们通过padas库的方法将字典写入excel中,代码如上,因为时间关系,我们的图片不再奉上。如有写的不好的地方请多多批评,谢谢阅读。

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值