为何是python3.4?因为我学习的python就是3.4版本的,所以这里讲如何用python3.4实现对学校教务系统的抓取。具体怎么爬,有很多人都讲的很好了,这里不再复述,关键谈一谈我是如何用python3.4实现这些个过程的。
目前大部分的python爬虫教程都是基于2.7的,我这里写这个文章的目的呢,一是加强对python爬虫这块业务的了解,二是希望对想用python3.x进行爬虫的人有所帮助。
开始正文之前,这里先推荐我学习python爬虫时的两篇爬虫专栏,他们对我的启发很大,不过是基于python2.7的,下面贴出原文链接。
Python爬虫入门教程
为何想到用python来爬虫
启发于知乎的这篇回答(能利用爬虫技术做到哪些很酷很有趣很有用的事情?)想着自己也能做一款校园级的应用出来就开干了
首先是python的学习,看的是廖雪峰的python教程也就大概看了个基础就开始了爬虫这块儿
好了扯了这么多没用的啦,下面咱们开干。
#-*-conding: UTF-8-*-
from urllib import request #导入urllib库中的request模块
import re
def focus_newslist():
focusnewsUrl = 'http://xxx.xxx.xxx.htm' #要闻的链接
with request.urlopen(focusnewsUrl) as f:
print('Status:',f.status,f.reason)
for k, v in f.getheaders():
print('%s:%s' % (k,v))
dataAll=f.read() #使用read()方法读取数据,否则返回的是一个请求对象的描述
print (dataAll) #打印结果
可以看到打印出了html源码,和response返回的头部信息与状态码
使用request.urlopen(focusnewsUrl)就实现了对数据的请求。这里我们传入了新闻链接的url。下面是urlopen()可以传入的参数,这里我们只关注url就可以了,其余的后面再说。
`urllib.request.urlopen(url, data=None, [timeout, ]*, cafile=None, capath=None, cadefault=False, context=None)
这样是实现了数据的抓取,但是这样还是不够的,还要对我们的数据进行提取才行。于是我使用正则表达式对内容进行提取。在源代码的基础上稍作修改
#-*-conding: UTF-8-*-
from urllib import request #导入urllib库中的request方法
import re
def focus_newslist():
focusnewsUrl = 'http://xxx.xxx.xxx.htm' #要闻的链接
with request.urlopen(focusnewsUrl) as f:
print('Status:',f.status,f.reason)
for k, v in f.getheaders():
print('%s:%s' % (k,v))
dataAll=f.read()
# 使用正则表达式,提取新闻列表ul标签下内容
data_ul=re.findall('.*?(.*?.*?.*?.*?.*?.*?
).*?
这里只是简单讲了下,如何使用python3.x的urllib库的使用,代码还有很多不完善的地方,将在后面的文章中,完善整个爬取过程和思路。
初次写这类,文章若有不好的地方欢迎讨论指教。