python爬虫框架比较,python爬虫多线程和多进程

  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的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: