爬虫学习个人总结(1)

ControlThread类

首先定义各种参数,及其对应的add_***函数,进行传递

            analysis = None               #url提取规则和html抽取规则     
            thread_run = True             #线程运行状态
            keyword = None                #是否添加前缀的关键词 为add or replace
            analysiss = None              #前缀字符串
            maximum = 1000                #最大爬虫运行次数
            limit = None                  #进入url list 的限制,用正则表达式
            operation_file = None         #数据保存形式以列表传入。为
            whether = True                #是否进行多行正则匹配
            sleeptime = 0                 #线程休息时间    
            maxumunqueue = 100            #最大队列容量
            urlList = []                  #url列表
            proxy_ip_list = []            #代理ip列表

modiftUrl

补全有缺陷的url,对其进行增加和替换,替换使用的是 HTMLAnalysis的modifyUrl
tip:这里使用xrange,xrange 是一个类,返回的是一个xrange对象。
使用xrange()进行遍历,每次遍历只返回一个值。
range()返回的是一个列表,一次性计算并返回所有的值。
因此,xrange()的执行效率要高于range()

judge_url

判断进入urllist的url是否满足limit的条件,正则匹配
tip:isinstance是用于判断对象的类型

queue_add_url

将url添加到队列中,并通过judge_url 进行判断

getHtmlUrl

从html获取url
有两种获取方式R , X
根据analysisDic的[‘url’][0]
前者是调用的是 HTMLAnalysis的findAll
后者是xpath
并使用modiftUrl进行补全

find_analysis

通过analysisDic字典找到url的解析方式,返回

write_start_url

初始化url队列
tip:
extend函数用于在列表末尾一次性追加另一个序列中的多个值(用新列表扩展原来的列表)。

*gerItem

解析html文档中所需的内容
有两种获取方式R , X
根据analysisDic的[‘url’][0]
前者是调用的是 HTMLAnalysis的findAll
后者是xpath

run

  • 爬虫的运行逻辑
    初始化 队列
    初始化解析类
    • 线程运行时循环
      控制队列大小,在小于maxumunqueue时,url进入队列
      队列为空,则跳出
      • 队列不为空时循环
        获取url
        生成运行日志
        线程不能运行则退出
        能运行则判断内存使用量是否超过30%,若是,则释放内存
        进入爬取
        通过代理ip获取html页面
        线程休息
        find_analysis获取html解析的字典
        getHtmlUrl 从html中提取url
        queue_add_url将url添加到对队列中
        定义listKey为analysisDic出去url键的字典
        保存数据 分为json方式和mongodb方式
    • 定期释放内存
      urllist超过10mb(calculation_mebibyte转换),不存入url

SaveData

save_data_json

ClearData.clear_dict_space先清除字典中的一些‘ ’
将Dic转成json文件格式
写入到文件中
tip:
json.dumps()json格式转换

save_data_mongodb

同样清除字典中的空格
client创立连接mogodb的地址
连接数据库db = client[‘name’]
连接聚集 posts =db[‘name’]
插入数据 posts.insert
关闭


ClearData

clear_dict_space

清除字典中的空格
需要进行类型判断,list,str,还是lxml.etree._Element再清理
tip:
str用strip()直接去除
lxml 用xpath(‘string(.)’)提取出字符串,之后strip()

clear_list_space

使用analysis_element对列表项目进行清理
并去除空项目

analysis_element

清除列表中lxml.etree._Element类中的空格


DownLoad

这个模块是专门为了下载相应url的html文档
getHtmlByU通过urllib2的模块进行下载速度较requests快
获得的文档是字节码没有进行任何转码

getHtmlByR

getHtmlByR通过requests的模块进行下载

getHtmlByU

getHtmlByU通过urllib2的模块进行下载速度较requests快

tip:
urllib2使用代理时,要自定义opener对象
urllib2.ProxyHandler({‘http’: proxyIp}) 代理ip字典
urllib2.HTTPCookieProcessor(cookielib.CookieJar()) Cookie处理
urlencode 将data编码

getHtmlByGAndF

这里使用grequests来进行代理ip并行访问
tip:
grequests用法:

urls = [‘****************’]
rs = (grequests.get(u) for u in urls)
grequests.map(rs)

HtmlAnalysis类

__init__

设定xpath的解析器的解析格式
self.parser = etree.HTMLParser(encoding=’utf-8’)

change_code

修改html编码格式,转化为utf-8‘’
tip:
chardet.detect 判断编码格式
decode 解码
encode 编码

search

判断匹配方式字符串是不是在html里
change_code 转换
之后通过re.search匹配

xpath

通过xpath方式对html对文档进行解析

*findAll

用正则表达式对文档进行解析
可以用whether参数决定是否多行匹配

modifyUrl

用re.sub来修改代替url

extract

把数据从element对象中提取出来
tip:
使用element.xpath(‘string(.)’)

* informationSplit

处理信息中的转义字符以及空格
tip:
split(str)
strip()

* getInformation*

使用 informationSplit来处理各种转义字符以及空格


  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值