python爬虫框架比较,python爬虫多线程和多进程
前言本文的文字及图片过滤网络,可以学习,交流使用,不具有任何商业用途,如有问题请及时联系我们以作处理。
基本开发环境Python 3.6皮查姆目标网页分析网站就选择发表情这个网站吧
网站是静态网页,所有的数据都保存在差异标签中,爬取的难度不大。
根据标签提取其中的表情包全球资源定位器(统一资源定位器)地址以及标题就可以了。
普通爬虫实现导入请求
导入帕塞尔
进口是
定义更改标题(标题):
模式=re。compile(r [\/\ \ \:\ * \?\ \ \]) # /\ : * ?
new_title=re.sub(pattern, _ ,title) #替换为下划线
返回新标题
对于范围(0,201)内的页面:
URL=f https://www。法比奥清。 com/标清/lists/page/{ page }。 html
标题={
用户代理: Mozilla/5.0(Windows NT 10.0;WOW64) AppleWebKit/537.36 (KHTML,像壁虎一样)Chrome/81。0 .4044 .138 Safari/537.36
}
response=requests.get(url=url,headers=headers)
选择器=parsel .选择器(响应。文本)
divs=selector.css( .tagbqppdiv’)
对于差异中的div:
img _ URL=div。CSS( a img:attr(data-original)).获取()
title_=img_url.split( . )[-1]
标题=div。CSS( a img:attr(title)).获取()
新标题=更改标题(标题)标题_
img _ content=请求。get(URL=img _ URL,headers=headers).内容
path=img\\ 新标题
用打开(路径,模式=wb )作为女:
f.write(img_content)
打印(标题)
代码简单的说明:
1,标题的替换,因为有一些图片的标题,其中会包含特殊字符,在创建文件的时候特殊字符是不能命名的,所以需要使用正则把有可能出现的特殊字符替换掉。
divs=selector.css( .tagbqppdiv’)
对于差异中的div:
img _ URL=div。CSS( a img:attr(data-original)).获取()
title_=img_url.split( . )[-1]
标题=div。CSS( a img:attr(title)).获取()
新标题=更改标题(标题)标题_
2,翻页爬取以及模拟浏览器请求网页
img _ content=请求。get(URL=img _ URL,headers=headers).内容
path=img\\ 新标题
用打开(路径,模式=wb )作为女:
f.write(img_content)
打印(标题)翻页多点击下一页看一下全球资源定位器(统一资源定位器)地址的变化就可以找到相对应规律了,网站是得到请求方式,使用请求请求网页即可,加上标题请求头,伪装浏览器请求,如果不加,网站会识别出你是大蟒爬虫程序请求访问的,不过对于这个网站,其实加不加都差不多的。
3,解析数据提取想要的数据
img _ content=请求。get(URL=img _ URL,headers=headers).内容
path=img\\ 新标题
用打开(路径,模式=wb )作为女:
f.write(img_content)
打印(标题)这里我们使用的是帕塞尔解析库,用的是钢性铸铁选择器解析的数据。
就是根据标签属性提取相对应的数据内容。
4,保存数据
img _ content=请求。get(URL=img _ URL,headers=headers).内容
path=img\\ 新标题
用打开(路径,模式=wb )作为女:
f.write(img_content)
打印(标题)请求表情包全球资源定位器(统一资源定位器)地址,返回获取内容二进制数据,图片,视频,文件等等都是二进制数据保存的。如果是文字则是正文。
小路就是文件保存的路径,因为是二进制数据,所以保存方式是wb。
多线程爬虫实现
导入请求
导入帕塞尔
进口是
导入并发期货
def get_response(html_url):
模拟浏览器请求网址,获得网页源代码
标题={
用户代理: Mozilla/5.0(Windows NT 10.0;WOW64) AppleWebKit/537.36 (KHTML,像壁虎一样)Chrome/81。0 .4044 .138 Safari/537.36
}
响应=请求。get(URL=html _ URL,headers=headers)
返回响应
定义更改标题(标题):
正则匹配特殊字符标题
模式=re。compile(r [\/\ \ \:\ * \?\ \ \]) # /\ : * ?
new_title=re.sub(pattern, _ ,title) #替换为下划线
返回新标题
定义保存(img_url,标题):
保存表情到本地文件
img _ content=get _ response(img _ URL).内容
path=img\\ 标题
用打开(路径,模式=wb )作为女:
f.write(img_content)
打印(标题)
def main(html_url):
主函数
响应=get_response(html_url)
选择器=parsel .选择器(响应。文本)
divs=selector.css( .tagbqppdiv’)
对于差异中的div:
img _ URL=div。CSS( a img:attr(data-original)).获取()
title_=img_url.split( . )[-1]
标题=div。CSS( a img:attr(title)).获取()
新标题=更改标题(标题)标题_
保存(img_url,new_title)
if __name__==__main__ :
执行者=并发。期货。线程池执行器(max _ workers=5)
对于范围(0,201)内的页面:
URL=f https://www。法比奥清。 com/标清/lists/page/{ page }。 html
executor.submit(main,url)
executor.shutdown()简单的代码说明:
其实在前文已经有铺垫了,多线程爬虫就是把每一块都封装成函数,让它每一块代码都有它的作用,然后通过线程模块启动就好。
执行者=并发。期货。线程池执行器(max _ workers=5)
最大的线程数
scrapy框架爬虫实现关于scrapy框架项目的创建这里只是不过多讲了,之前文章有详细讲解过,刺儿头框架项目的创建,可以点击下方链接查看
简单使用scrapy爬虫框架批量采集网站数据
items.py
进口废品
从.项目导入标清包项目
类标清蜘蛛(刺儿头。蜘蛛):
name=标清
allowed _ domains=[ fabiao Qing。com ]
start _ URLs=[f https://www。法比奥清。com/标清/lists/page/{ page } .范围(1,201)中页面的" html "
定义解析(自身,响应):
divs=响应。CSS( # bqb div。ui。段。img over div’)
对于差异中的div:
img _ URL=div。CSS( a img:attr(data-original)).获取()
标题=div。CSS( a img:attr(title)).获取()
yield BiaoqingbaoItem(img _ URL=img _ URL,title=title)
中间件。巴拉圭
BOT_NAME=标清宝
蜘蛛_模块=[彪包青。蜘蛛的]
包青。蜘蛛的
DOWNLOADER _ MIDDLEWARES={
标清宝。中间件。“标清宝下载中间件”:543,
}
ITEM_PIPELINES={
标包青。管道。 downloadpicturepipeline :300,
}
IMAGES_STORE= ./图像
管道。巴拉圭
进口废品
从.项目导入标清包项目
类标清蜘蛛(刺儿头。蜘蛛):
name=标清
allowed _ domains=[ fabiao Qing。com ]
start _ URLs=[f https://www。法比奥清。com/标清/lists/page/{ page } .范围(1,201)中页面的" html "
定义解析(自身,响应):
divs=响应。CSS( # bqb div。ui。段。img over div’)
对于差异中的div:
img _ URL=div。CSS( a img:attr(data-original)).获取()
标题=div。CSS( a img:attr(title)).获取()
yield BiaoqingbaoItem(img _ URL=img _ URL,title=title)
setting.py
BOT_NAME=标清宝
蜘蛛_模块=[彪包青。蜘蛛的]
包青。蜘蛛的
DOWNLOADER _ MIDDLEWARES={
标清宝。中间件。“标清宝下载中间件”:543,
}
ITEM_PIPELINES={
标包青。管道。 downloadpicturepipeline :300,
}
IMAGES_STORE= ./图像
标清
进口废品
从.项目导入标清包项目
类标清蜘蛛(刺儿头。蜘蛛):
name=标清
allowed _ domains=[ fabiao Qing。com ]
start _ URLs=[f https://www。法比奥清。com/标清/lists/page/{ page } .范围(1,201)中页面的" html "
定义解析(自身,响应):
divs=响应。CSS( # bqb div。ui。段。img over div’)
对于差异中的div:
img _ URL=div。CSS( a img:attr(data-original)).获取()
标题=div。CSS( a img:attr(title)).获取()
yield BiaoqingbaoItem(img _ URL=img _ URL,title=title)
简单总结:三个程序的最大的区别就在于在于爬取速度的相对,但是如果从写代码的时间上面来计算的话,普通是最简单的,因为对于这样的静态网站根本不需要调试,可以从头写到位,加上空格一共也就是29行的代码。
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。