(3条消息) Python爬取全国高校信息并写入csv
2021-03-23更新
原来的页面有一些小的改变, 原来的院校特效
一列变成了现在的 一流大学建设高校
和一流学科建设高校
两列, 所以代码需要有一些改变,总的代码已经更新了,至于思路那部分就不改了.
- 现在:
- 原来
前言
学了Python爬虫
过了有一段时间了. 有些概念都开始模糊了, 所以打算写一些小的爬虫, 加深一下映象, 别到时候学了就忘了,然后用的时候又全程懵逼
外部库依赖
# Python3 # 使用 pip install 库名称 来安装 requestslxml
思路
- 原网址: https://gaokao.chsi.com.cn/sch/search.do?searchType=1&start=0
- 不难分析出, 每增加一页, 链接上的
start
参数值就增加20,通过xpath
先匹配出所有的列 - 在循环匹配通过子
xpath
获取我们要获取的内容 - 最后通过
python
内置的csv
模块将内容写入csv文件中
代码(已更新)
import requestsfrom lxml import etreeimport timeimport csvstart_time = time.time()url = 'https://gaokao.chsi.com.cn/sch/search.do?searchType=1&start='headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2743.116 Safari/537.36'}with open('data.csv', 'a', encoding='utf-8') as f: csv_writer = csv.writer(f) csv_writer.writerow(['院校名称', '院校所在地', '教育行政主管部门', '院校类型', '学历层次', '一流大学建设高校', '一流学科建设高校', '研究生院', '满意度'])start = 0count = 0while start <= 2820: response = requests.get(url + str(start), headers=headers) start += 20 html = etree.HTML(response.text) university_list = [] for university in html.xpath('//tr[td]'): university_name = university.xpath('./td/a')[0].text.strip() university_addr = university.xpath('./td')[1].text.strip() university_agency = university.xpath('./td')[2].text.strip() university_type = university.xpath('./td')[3].text.strip() university_level = university.xpath('./td')[4].text.strip() if len(university.xpath('./td')[5]) == 1: university_is_ylxx = True else: university_is_ylxx = False if len(university.xpath('./td')[6]) == 1: university_is_ylxy = True else: university_is_ylxy = False if len(university.xpath('./td')[7]) == 1: university_is_grad = True else: university_is_grad = False # l = len(university.xpath('./td/a')) university_satisfaction = university.xpath('./td/a')[1].text.strip() if l >= 2 else '--' university_list = [university_name, university_addr, university_agency, university_type, university_level, university_is_ylxx, university_is_ylxy, university_is_grad, university_satisfaction] print(university_list) with open('data.csv', 'a', encoding='utf-8') as f: # 写入文件 csv_writer = csv.writer(f) csv_writer.writerow(university_list) count += 1 time.sleep(1)end_time = time.time()print("共花费 {} S, 爬取 {} 座高校".format(end_time - start_time, count))
赞 (0)