简单的爬虫架构

调度器

URL管理器

管理待抓取的URL集合和已抓取的URL,防止重复抓取,防止死循环

功能列表

1:判断新添加URL是否在容器中
2:向管理器添加新URL
3:判断容器是否为空
4:将已爬取URL移动到已爬取集合
5:获取待爬取URL

实现方式

1:使用set(自动去除重复项目)
2:使用关系数据库(MySQL)
3:使用缓存数据库(redis):大型公司使用这玩意

网页下载器

功能列表

1:get 
2:post
3:伪装头信息
4:HTTPCookieProcessor
5:ProxyHandler
6:HTTPSHandler
7:HTTPRedirectHAndler

实现方法

1:urllib2
2:URLlib3
3:requests

此处使用request实现

#coding=utf-8
import requests,json

url = \'http://www.baidu.com\'
headers = {\'user-agent\':\'Mozilla/5.0\'}	#模拟Mozilla浏览器头,此行可以为空
get_data = {\'wd\':\'linux\'}
r = requests.get(url,headers=headers,params = get_data)

if r.status_code == 200:
	\'访问成功\'
	try:
		file = open(\'baidu.com\',\'w\')
		file.write(\'本次访问网址是:\' + r.url)
		print(\'本次访问网址是:\' + r.url)
	except IOError as e:
		print(\'文件读取错误:\' + str(e))

	try:
		file = open(\'baidu.com\',\'a+\')
		text = r.text
		file.write(\'\n得到数据如下:\n\' + text)
		print(\'得到数据长度:\' + str(len(r.content)))
	except IOError as e:
		print(\'文件读取错误:\' + str(e))
else:
	print(\'我是假的404\')

解析器

1:正则表达式			传统经典,语法奇葩难懂
2:html.parser		python自带
3:BeautifulSoup		可以使用上下两种解析器,集合天地精华
4:lxml				可以解析html和xml


#coding=utf-8
from bs4 import BeautifulSoup,re

try:
	file = open(\'baidu.com\',\'r\')
	html_str = file.read()
	print(type(html_str))
except IOError as e:
	print(str(e))
finally:
	if \'file\' in locals():
		file.close()

if \'html_str\' in locals():
	#根据HTML网页字符串创建BeautifulSoup对象
	soup = BeautifulSoup(
		html_str,				#html文档字符串
		\'html.parser\',			#html解析器,可以使用py自带的html_parser
		from_encoding=\'utf-8\'	#文档编码格式
		)


	#soup.find(name,attrs,string)	#只查找第一个匹配对象,支持正则表达式
	nodes = soup.find_all(\'a\')
	for node in nodes:
		print(node.name)			#得到节点标签(参数1)
		print(node[\'href\'])			#得到属性(参数2)
		print(node.get_text())		#得到文字(参数3)

	#正则匹配
	nodes2 = soup.find_all(\'a\',href=re.compile(r"map"))
	print(\'\n\n\n\n\n---------------------------百年分割线------------------------\n\')
	for node in nodes2:
		print(node.name)			#得到节点标签(参数1)
		print(node[\'href\'])			#得到属性(参数2)
		print(node.get_text())		#得到文字(参数3)

版权声明:本文为cenzhongman原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.cnblogs.com/cenzhongman/p/6914400.html