一、一个基本爬虫框架主要包括五大模块:爬虫调度器,URL管理器,HTML下载器,HTML解析器,数据存储器。
URL管理器:负责管理URL链接,维护以爬取的和未爬取的url集合。
HTML下载器:用于从URL管理器中获取未爬取的URL链接并下载网页。
HTML解析器:用于从下载的html页面中解析出未爬取的URL交给url管理器,把解析出的内容交给数据存储器。
数据存储器:用于存储解析出的数据。
运行流程:
URL管理器:
添加新的url到待爬取url集合中。
判断待添加的url是否在容器中(包括待爬取url集合和已爬取url集 合)。
获取待爬取的url。
判断是否有待爬取的url。
将爬取完成的url从待爬取url集合移动到已爬取url集合。
HTML下载器:
HTML下载器用来下载网页内容,这个时候特别注意网页的编码,以保证下载页面没有乱码.这个时候需要request模块。
data = urllib.request.urlopen(url).read().decode("gbk")
HTML解析器:
HTML解析器采用BeautifulSoup4对页面进行解析,需要解析的为URL和所要提取的数据信息
url = 'http://www.biquge.com.tw/11_11850/'
data = urllib.request.urlopen(url).read().decode("gbk")
soup = BeautifulSoup(data, "lxml")
for a in soup.find(id='list').find_all('a'):
href = repr("http://www.biquge.com.tw" + a.get('href'))
title = repr(a.string)
数据储存器:
把提取到的信息存储到数据库中,或者json等文件中进行保存。
储存到json
list.append({'href':href,'title':title})
content.append({'content':list,'title':'圣墟'})
with open('biquge.json','w',encoding="utf-8") as fp:
json.dump(content,fp=fp,indent=4,ensure_ascii=False)
存储到数据库:
Connection = pymysql.connect(host='localhost',port=3306,user='root',db='xiaoshuo',passwd='521521',charset='utf8')特别注意这里是utf8
cur = Connection.cursor()
cur.execute('INSERT INTO xiaoshuo (href,title) VALUES(%s,%s)',(href,title))
Connection.commit()
Connection.close()