首页 技术 正文
技术 2022年11月18日
0 收藏 490 点赞 4,276 浏览 1677 个字

简单的爬虫架构

调度器

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,jsonurl = '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.parserpython自带
3:BeautifulSoup可以使用上下两种解析器,集合天地精华
4:lxml可以解析html和xml#coding=utf-8
from bs4 import BeautifulSoup,retry:
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)
相关推荐
python开发_常用的python模块及安装方法
adodb:我们领导推荐的数据库连接组件bsddb3:BerkeleyDB的连接组件Cheetah-1.0:我比较喜欢这个版本的cheeta…
日期:2022-11-24 点赞:878 阅读:9,497
Educational Codeforces Round 11 C. Hard Process 二分
C. Hard Process题目连接:http://www.codeforces.com/contest/660/problem/CDes…
日期:2022-11-24 点赞:807 阅读:5,910
下载Ubuntn 17.04 内核源代码
zengkefu@server1:/usr/src$ uname -aLinux server1 4.10.0-19-generic #21…
日期:2022-11-24 点赞:569 阅读:6,744
可用Active Desktop Calendar V7.86 注册码序列号
可用Active Desktop Calendar V7.86 注册码序列号Name: www.greendown.cn Code: &nb…
日期:2022-11-24 点赞:733 阅读:6,498
Android调用系统相机、自定义相机、处理大图片
Android调用系统相机和自定义相机实例本博文主要是介绍了android上使用相机进行拍照并显示的两种方式,并且由于涉及到要把拍到的照片显…
日期:2022-11-24 点赞:512 阅读:8,136
Struts的使用
一、Struts2的获取  Struts的官方网站为:http://struts.apache.org/  下载完Struts2的jar包,…
日期:2022-11-24 点赞:671 阅读:5,300