本站源码全部测试通过,配有前台及后台演示图,绿色安全,希望能对大家有所帮助!
  • 收藏本站
  • 网站地图
  • 发布源码
  • 首 页
  • VPS/云主机
  • 交流论坛
  • Python爬虫的三种数据方式-终结篇
    时间:2019-03-15 08:14:44 来源:模板之家 作者:模板之家测试提供 下载:1906 次
    • 源码说明:本站源码全部经过测试,配有前台及后台管理界面演示图,去除后门,绿色安全,希望对大家学习研究能有所帮助!
    • 源码类型:各行各业
    • 源码大小:44.7 MB
    • 运行环境:PHP | MYSQL
    • 下载次数:1906 次
    • 推荐主机:
    • 提取密码/源码编号:
    • 本地下载
    • 本地下载
    • 本地下载
    京峰教育 Python编程学习


    (为了不影响大家微信的正常使用,以及不用忍受腾讯视频的长广告

    公众号内只提供录播的片段

    完整版视频请点击左下角阅读全文观看

    跳转B站无广告哦~)




    完整版视频请点击左下角阅读全文观看



    >>>课堂笔记

    爬虫:

    lxml,re,bs4数据抓取

    按情况来说:


    性能分析------

    bs4:***

    Python开发

    难度:非常简单

    效率:最慢的

    复用性:高


    lxml:*****

    C开发的

    难度:稍微简单

    效率:第二快

    复用性:高

    re:****

    难度:最难的

    效率:最快的

    复用性:差

    兼容性高一些


    robots.txt 爬虫限制

    标准库

    robotparser

    from urllib.robotparser import *

    rp = RobotFileParser()

    rp.set_url(robots.txt_path)

    rp.read()

    user_agent

    url 

    rp.can_fetch()

    sitemap.xml 站点地图

    xml模块



    >>>测试源码


    from urllib.request import urlopen,Request,urlparse,ProxyHandler,build_opener,install_opener
    from urllib.error import URLError,HTTPError
    from datetime import datetime
    import time
    import re
    from bs4 import BeautifulSoup
    import lxml.html

    FIELDS = [链接地址,职位月薪, 工作地点, 发布日期, 工作性质, 工作经验, 最低学历, 招聘人数, 职位类别]

    def download(url,proxy=None,user_agent=wswp,num_retries=2):
       print([+] 正在下载: %s % url)
       headers = { User-Agent:user_agent}
       req = Request(url, headers=headers)
       if proxy:
           handler = {urlparse(url).scheme:proxy}
           opener= build_opener(handler)
           install_opener(opener)
       try:
           html = urlopen(req).read().decode()
       except HTTPError as e:
           html = None
           print([W] 下载出现服务器错误: %s % e.reason)
           if num_retries > 0:
               print([+] 尝试重新下载 第%d次 % (3 - num_retries))
               if hasattr(e,code) and 500 <= e.code < 600:
                   html = download(url,user_agent=user_agent,num_retries=num_retries-1)
           else:
               print([E] 尝试重新下载失败)
       except URLError as e:
           html = None
           print("[E] 站点不可达: %s" % e.reason)
       return html

    def re_scraper(url,html):
       data = re.findall(<li><span>[u4e00-u9fa5.:s]+</span>.*?>([a-zA-Z/u4e00-u9fa5::ds/-]+).*?>,html)
       data.insert(0,url)
       clear_data = dict(zip(FIELDS,data))
       return clear_data

    def bs4_scraper(url,html):
       bs4_obj = BeautifulSoup(html,lxml)
       data = bs4_obj.find(ul,{class:terminal-ul clearfix}).findAll(strong)
       data = [det.get_text().strip() for det in data]
       data.insert(0,url)
       clear_data = dict(zip(FIELDS,data))
       return clear_data

    def lxml_scraper(url,html):
       lxml_obj = lxml.html.fromstring(html)
       data = lxml_obj.cssselect(ul.clearfix > li > strong)
       data = [det.text_content().strip() for det in data ]
       data.insert(0,url)
       clear_data = dict(zip(FIELDS,data))
       return clear_data

    url = http://jobs.zhaopin.com/449193880250014.htm
    html = download(url)

    TEST_NUM = 1000#我将对一个网页进行1000次的数据分析

    fc_ = {re:re_scraper,bs4:bs4_scraper,lxml:lxml_scraper}

    #time.time()当前的linux时间 1970/1/1 秒为单位
    for fc in fc_:
       #fc key值字符串
       #fc_[fc] 函数
       #1970年可称为UNIX元年
       start = time.time()
       for i in range(TEST_NUM):
           if fc_[fc] == re_scraper:#如果是正则的抓取函数
               re.purge()#清理掉正则的编译缓存
               #正则要快
           fc_[fc](url,html)
       end = time.time()
       print(%s: %.2f sec % (fc,end-start))


    >>>完整版代码

    from urllib.request import urlopen,Request,urlparse,ProxyHandler,build_opener,install_opener
    from urllib.error import URLError,HTTPError
    from datetime import datetime
    import time
    import re
    from bs4 import BeautifulSoup
    import lxml.html
    from urllib.robotparser import *

    FIELDS = [链接地址,职位月薪, 工作地点, 发布日期, 工作性质, 工作经验, 最低学历, 招聘人数, 职位类别]

    class Throttle:
       def __init__(self,time_sleep):
           self.time_sleep = time_sleep
           self.url_time = {}
       def wait(self,url):
           domain = urlparse(url).netloc
           last_time = self.url_time.get(domain)
           if self.time_sleep > 0 and last_time is not None:
               sleep_time = self.time_sleep - (datetime.now() - last_time).seconds
               if sleep_time > 0:
                   print([+] 休息: %ds % sleep_time)
                   time.sleep(sleep_time)
               else:
                   print("[+] 无需休息")
           self.url_time[domain] = datetime.now()

    def download(url,proxy=None,user_agent=wswp,num_retries=2):
       print([+] 正在下载: %s % url)
       headers = { User-Agent:user_agent}
       req = Request(url, headers=headers)
       if proxy:
           handler = {urlparse(url).scheme:proxy}
           opener= build_opener(handler)
           install_opener(opener)
       try:
           html = urlopen(req).read().decode()
       except HTTPError as e:
           html = None
           print([W] 下载出现服务器错误: %s % e.reason)
           if num_retries > 0:
               print([+] 尝试重新下载 第%d次 % (3 - num_retries))
               if hasattr(e,code) and 500 <= e.code < 600:
                   html = download(url,user_agent=user_agent,num_retries=num_retries-1)
           else:
               print([E] 尝试重新下载失败)
       except URLError as e:
           html = None
           print("[E] 站点不可达: %s" % e.reason)
       return html

    def get_links(html):
       webpage_regex = re.compile(<a[^>]+href=["](.*?)["], re.IGNORECASE)
       return webpage_regex.findall(html)

    def link_crawler(home_url,link_regex,scrape_callback=None,time_sleep=0,depth_regex=None,max_depth=-1):
       crawl_queue = [home_url]
       seen = {home_url:0}
       throttle = Throttle(time_sleep)
       while crawl_queue:
           url = crawl_queue.pop(0)
           depth = seen[url]
           if depth != max_depth:
               if get_robots(home_url,url):
                   throttle.wait(url)
                   html = download(url)
                   if depth_regex and re.match(re.compile(depth_regex,re.IGNORECASE),url):
                       if scrape_callback:
                           scrape_callback(url,html)
                       continue

                   for link in get_links(html):
                       if re.match(re.compile(link_regex,re.IGNORECASE),link) and link not in seen:
                           seen[link] = depth + 1
                           crawl_queue.append(link)
               else:
                   print([E] Un Access URL: %s % url)


    def re_scraper(url,html):
       data = re.findall(<li><span>[u4e00-u9fa5.:s]+</span>.*?>([a-zA-Z/u4e00-u9fa5::ds/-]+).*?>,html)
       data.insert(0,url)
       clear_data = dict(zip(FIELDS,data))
       print(clear_data)

    def bs4_scraper(url,html):
       bs4_obj = BeautifulSoup(html,html.parser)
       data = bs4_obj.find(ul,{class:terminal-ul clearfix}).findAll(strong)
       data = [det.get_text().strip() for det in data]
       data.insert(0,url)
       clear_data = dict(zip(FIELDS,data))
       print(clear_data)


    def lxml_scraper(url,html):
       lxml_obj = lxml.html.fromstring(html)
       data = lxml_obj.cssselect(ul.clearfix > li > strong)
       data = [det.text_content().strip() for det in data ]
       data.insert(0,url)
       clear_data = dict(zip(FIELDS,data))
       print(clear_data)

    def Scrape_callback(choice=re):
       fc_ = {re:re_scraper,bs4:bs4_scraper,lxml:lxml_scraper}
       if fc_.get(choice):
           return fc_.get(choice)

    def get_robots(home_url,url,user_agent=wswp):
       rp = RobotFileParser()
       rp.set_url(home_url + /robots.txt)
       rp.read()
       return rp.can_fetch(user_agent,url)

    url = https://www.zhaopin.com/static/analytics.js
    #home_url = https://www.zhaopin.com
    #url = http://sou.zhaopin.com/jobs/searchresult.ashx?jl=%E5%8C%97%E4%BA%AC&kw=python%E7%88%AC%E8%99%AB&p=1&isadv=0  
    depth_regex = http://jobs.zhaopin.com/[d]{15}.htm
    link_regex = (http://jobs.zhaopin.com/[d]{15}.htm|http://sou.zhaopin.com/jobs/searchresult.ashx?jl=%E5%8C%97%E4%BA%AC&kw=Python)
    link_crawler(url,link_regex=link_regex,depth_regex=depth_regex,scrape_callback=Scrape_callback(choice=re))







    有不懂处可在文章下方留言,老师会回复的哦~



      阅读原文

      发送中

      阅读原文
      文章来源:开源之家-免费素材_软件_模板_源码下载-更快的站长下载站

      郑重声明:
      本站资源均由高价购买、会员分享,全部经过测试,配有前台及后台管理界面演示图,去除后门,绿色安全,希望对大家学习研究能有所帮助!
      若您需要商业运营或用于其它商业活动,请您购买正版授权并合法使用。 我们不承担任何技术及版权问题,且不对任何资源负法律责任。
      如无法下载,联系站长索要。如有侵犯您的版权,请提交软件证书/图片地址和源码链接 我们尽快处理。

      大秀直播大秀付费直播项目源码H5网页版手机登录自带防封完整版大秀直播大秀付费直播项目源码H5网页版
      最新中易广告联盟程序V9.0商业源码源码下载版 完美无错最新中易广告联盟程序V9.0商业源码源码
      独家首发搭建教程,微信红包牛+接龙+扫雷+PC蛋蛋源码。独家首发搭建教程,微信红包牛+接龙+扫
      推荐下载

      微商助理 防伪防窜货溯源代理授

      微商助理 防伪防窜货溯源代理授各行各业186

      158兼职赚qian网平台源码 天下兼

      158兼职赚qian网平台源码 天下兼各行各业67

      [php源码下载] 微小豆朋友圈分享

      [php源码下载] 微小豆朋友圈分享各行各业162

      ThinkPHP仿生活家装饰公司网站源

      ThinkPHP仿生活家装饰公司网站源各行各业155

      聚合社卡盟源码最新 V1.5 版网站

      聚合社卡盟源码最新 V1.5 版网站各行各业51
      开源之家广告栏目A
      热门下载

      大秀直播大秀付费直播项目源码H5

      大秀直播大秀付费直播项目源码H5各行各业8272

      最新中易广告联盟程序V9.0商业源

      最新中易广告联盟程序V9.0商业源各行各业5859

      独家首发搭建教程,微信红包牛+

      独家首发搭建教程,微信红包牛+各行各业5655

      自动授权系统 卡密域名授权源码

      自动授权系统 卡密域名授权源码 各行各业5380

      视频源码支付自动赚钱源码,引导

      视频源码支付自动赚钱源码,引导各行各业4612
      开源之家广告栏目B
      开源之家广告栏目C
      在线客服
      客服微信

      扫一扫......加客服微信