写在前面:
这是最简单的爬虫了吧,咱们大学也没什么恶心的反爬系统,不会说什么不换IP地址就不给爬(大前端和房源网真的搞得我头发都白了,现在回去爬一下,发现也就是换个IP地址的事情),但即使是这么简单的一个爬虫依旧耗了我两个小时。哎,还是不够熟练呀
不得不说日月光华的网课讲的很好,其中的条理,像内网页什么的,就是我这样一点天赋都没得的人都能慢慢弄明白。但是呢我的思想有些局限于网课了(也不能怪网课,怪我自己笨),下意识地认为自己爬不了一系列网页某些部分没有规律地情况。。。其实是大错特错了。。完全可以通过前置网页来获取内部网的信息呀!!!还好室友提醒了我一下,不然鬼知道我要走多少弯路。
其实代码还没有完全完成,还没有用正则表达式处理数据和将数据存入数据库中。。。不管了明天再搞
最气的是!!!!晚上的一个小时debug!!!我居然!!!是因为少加了一个括号!!!气得我当场去世,诶,我要是脑子清醒一点也不至于犯这种错了
8说了,写完博客就去来一把剑魔安慰一下我受伤的内心
下面是代码~完整版明天再贴上
import requests
from lxml import etree
import random
from string import punctuation
import re
import time
def download(url):
headers = {'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36'}
time.sleep(1)
r = requests.get(url,headers=headers)
r.encoding='utf-8'
return etree.HTML(r.text)
def spider_detail(list_url):
selector = download(list_url)
jianjie = selector.xpath('string(/html/body/div[2]/div/div[2]/div/div[1]/div[3]/div[1])')[0:].strip()
lingyu = selector.xpath('string(/html/body/div[2]/div/div[2]/div/div[1]/div[5]/div[1])')[0:].strip()
lianxi = selector.xpath('string(/html/body/div[2]/div/div[2]/div/div[1]/div[7]/div[1])')[0:].strip()
bumen = selector.xpath('/html/body/div[2]/div/div[2]/div/div[2]/div[2]/p[1]/text()')[0]
name = selector.xpath('/html/body/div[2]/div/div[2]/div/div[2]/div[2]/h3[1]/text()')[0]
write_down(jianjie,lingyu,lianxi,name,bumen)
def write_down(jianjie,lingyu,lianxi,name,bumen):
with open(name+'.txt','wt',encoding='utf-8')as f:
f.write(jianjie+'\n')
f.write(lingyu+'\n')
f.write(lianxi+'\n')
print('正在下载 '+name+bumen)
def spider_url(total_url):
selection = download(total_url)
lists = selection.xpath('//*[@target="_blank"]')
x_url = []
for list in lists:
t_url = list.xpath('@href')
if list == lists[-1]:
pass
else:
x_url.append('http://dsxxcx.zstu.edu.cn'+t_url[0])
for i in x_url:
spider_detail(i)
dict = {'理学院':14,"材料与纺织学院":11,"服装学院":5,"信息学院":6,"机械与自动控制学院":10,"建筑工程学院":5,"生命科学学院":7,"经济管理学院":7,"艺术与设计学院":6,"法政学院":3,"外国语学院":3,"文化传播学院":2,"马克思主义学院":3,"启新学院":2,"继续教育学院":2,"科技与艺术学院":2,"校外单位":6}
for x in dict:
for i in range(1,dict[x]):
spider_url('http://dsxxcx.zstu.edu.cn/master/index.php?r=site/college&college={}&page={}'.format(x,str(i)))