起因
某日,张蛋蛋同学提起自己要做一个vlog,苦于没有素材。Vlog显然就超出一个计算机人的知识范围一丢丢了,不过素材嘛~ 我就想着把全国2000多所院校的主页都抓下来,从另一个角度展示国庆的氛围.
经过
确定了目标就要设计爬取方法了。每个学校主页截图可以用 selenium + python解决,但是如何获得这么多学校的主页地址呢。
因为电脑上有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+张主页的照片,先来欣赏一部分吧!
最后
抓取的过程中也发现了一些好玩的地方。
这这这学校你们都不维护自己官网的嘛???
谁家主页还设置IP过滤限制访客的???
我们可以换一个页面模板吗???
最后的最后,你们是一门三兄弟吗???
总结
从张蛋蛋同学提出问题到完成,大概花费了两个小时解决了问题。作为一名合格的 准程序员,你要学会自己给自己提需求~