张蛋蛋的爬虫One

1,005 阅读2分钟

起因


     某日,张蛋蛋同学提起自己要做一个vlog,苦于没有素材。Vlog显然就超出一个计算机人的知识范围一丢丢了,不过素材嘛~ 我就想着把全国2000多所院校的主页都抓下来,从另一个角度展示国庆的氛围.

经过


     确定了目标就要设计爬取方法了。每个学校主页截图可以用 selenium + python解决,但是如何获得这么多学校的主页地址呢。

     找来找去找到了这么个地方 阳光高考信息网院校库。更好的是这个页面明显的有规律,每一个学校对应一个Id。而且院校的主页位置是固定的很容易就可以将网址提取出来。

pku

     因为电脑上有MySql就省的保存页面地址到文件了,代码如下:

import pymysql
import requests
from bs4 import BeautifulSoup

db = pymysql.connect("localhost", "root", "root", "A")
cursor = db.cursor()

sql = ""
for i in range(1, 2000):
    url = "https://gaokao.chsi.com.cn/sch/schoolInfoMain--schId-" + str(i) + ".dhtml"
    page = requests.get(url)
    P = BeautifulSoup(page.content, "html5lib")
    try:
        sql = "INSERT IGNORE INTO a.a(a)VALUES ('{}')".format(str(P.find("span", class_="judge-empty").get_text()))
    except Exception as e:
        print(e)
    try:
        print(str(P.find("span", class_="judge-empty").get_text()))
        cursor.execute(sql)
        db.commit()
    except Exception as e:
        print(e)

     最后爬取的一部分结果在 这里,可以看到大部分院校的网址都是很标准的,同时大部分双一流院校都在放网址的标签里放上了招办网址,学校名称等等信息。因为标准的网址数量已经可以满足了,所以就没有对不标准的进行清洗了,懒~

数据库

     最后一步当然就是抓取主页截图了,采用的是 selenium +python + chrome,代码如下:

import pymysql
from selenium import webdriver

db = pymysql.connect("localhost", "root", "root", "a")
cursor = db.cursor()
sql = "SELECT * FROM a.a "

# 获取数据库的所有信息
data_from = cursor.execute(sql)
total_html = cursor.fetchall()

browser = webdriver.Chrome(executable_path="C:\\Users\wangz\PycharmProjects\\U\chromedriver.exe")
j = 1
for i in total_html:

    url = str(i).replace('\n', '')
    # try-catch 忽略不规则网址的错误,懒~
    try:
        print(url)
        browser.get(url)
        browser.save_screenshot(str(j) + '.png')
        j += 1
    except Exception as e:
        print(e)

结果


共抓取了500+张主页的照片,先来欣赏一部分吧!

西北政法大学

福建师范大学协和学院

桂林电子科技大学

燕山大学

德州学院

曲阜师范大学

TSU

隔壁漂亮小姐姐们的北师大

BUPT

最后

抓取的过程中也发现了一些好玩的地方。

这这这学校你们都不维护自己官网的嘛???

谁家主页还设置IP过滤限制访客的???

我们可以换一个页面模板吗???

最后的最后,你们是一门三兄弟吗???


总结

从张蛋蛋同学提出问题到完成,大概花费了两个小时解决了问题。作为一名合格的 准程序员,你要学会自己给自己提需求~

test