大家最终是要把那多个贰个网页里的讥讽爬取存款和储蓄起来澳门太阳集团城网址

 

  爬虫代码,文件名称叫spider.py。

由于笑先生话分类里的原创笑话的页面格式不一样,所以就差那些还未实现。初学,第1回写博客记录,下载了编写博客的openLiveWriter发掘很难用,依然用网页写好一点。

  首先分明要爬取的笑话网址,作者是直接百度笑话搜到的率先个网址,网站是,点进入开采网页营造以小编之见依旧比较复杂的,由于还是初读书人,首先得先找到网页能源集中所在,找寻里面包车型地铁原理,然后才好有指向的爬取财富。对于那个网站,小编发觉在左边侧栏有一个笑话大全的分类框。那些看起来大致包蕴了全站的文字笑话了。在这里个分类框下有超多小的归类,点进小的分类后是此分类下的享有笑话网页列表,每种网页里面满含部分笑话,我们最后是要把那一个四个网页里的吐槽爬取存款和储蓄起来。

  平常筛选内容都会选拔对象内容组件的上层轻便唯黄金时代标志的组件,在此作者选拔了<div
class=”joketype
l_left”></div>那个html,这一个div能够分包全数分类的剧情,然后再扩充一回筛选就可以把装有url筛选出来了。到了分类子页面作者看了须臾间url的准则,那几个分类的url都以/listXX_大家最终是要把那多个贰个网页里的讥讽爬取存款和储蓄起来澳门太阳集团城网址。大家最终是要把那多个贰个网页里的讥讽爬取存款和储蓄起来澳门太阳集团城网址。1.htm开首,开掘分类页面里面有个尾页的按键的url恰巧是终结,並且url的.htm后边的相当数字依次增加,所以就很好爬取全体笑话页面了,至于提戏弄话就不再多说了,直接上存有代码。

大家最终是要把那多个贰个网页里的讥讽爬取存款和储蓄起来澳门太阳集团城网址。大家最终是要把那多个贰个网页里的讥讽爬取存款和储蓄起来澳门太阳集团城网址。  爬取思路:爬取,得到一个html页面,分析此html页面,拿到分类框里的有所分类的url地址,遍历每二个分拣的url,爬取分类url的html网页,解析归类url网页,获得全方位吐槽网页列表,遍历笑话网页列表url,取得终极的含有五个二个吐槽的html页面,获嘲弄话,存款和储蓄到mysql数据库。

  mysql数据仓库储存款和储蓄模块代码,文件名叫mysql.py。

澳门太阳集团城网址 1

只顾:pymysql模块是必要安装的,日常今后python都默许有pip包管理,未有那个模块间接在命令行实践:pip
pymysql就可以。需事先在mysql数据Curry创设python数据库,表joke,表有两列,一列是id,作者设置其为int类型的自增的主键属性,一列joke,设置为text类型,存放笑话。insert函数是流传一个joke的tuple类型参数,那么些tuple里面寄放是一条一条字符串,每条字符串表示叁个笑话,insert函数的机能是将这一个tuple元组的耻笑插入到数据库。get_one函数是得到一条笑话,在这里边作者增多四个表特地来保存笑话取到哪了,避防读取重复笑话,那么些表名字是number,里面有一个字段,number,作者达成插入了一条记下,值为0。

import pymysql

def insert(joke):
    #获取链接
    conn=pymysql.connect(host='127.0.0.1',user='root',passwd='123456',db='python')
    cur=conn.cursor()
    #sql语句,%s是占位符(%s是唯一的,不论什么数据类型都使用%s)防止sql注入
    sql='insert into joke(joke) VALUES(%s)'
    #params=('eric','wuhan') #参数 插入单条
    #li=[('a1','b1'),('a2','b2')] #批量插入参数
    #reCount=cur.execute(sql,params)
    reCount=cur.executemany(sql,joke) #批量插入
    conn.commit() #提交,执行多条命令只需要commit一次就可以
    cur.close()
    conn.close()

def get_one():
    #获取链接
    conn=pymysql.connect(host='127.0.0.1',user='root',passwd='123456',db='python')
    cur=conn.cursor()
    sql1='select number from number'
    reCount=cur.execute(sql1)
    number=cur.fetchone()[0]+1
    sql2='select joke from joke where id=%s'
    reCount=cur.execute(sql2,number)
    joke=cur.fetchone()[0]
    sql3='update number set number=%s where number=%s'
    params=(number,number-1)
    reCount=cur.execute(sql3,params)
    conn.commit()
    cur.close()
    conn.close()

澳门太阳集团城网址 2

 

import urllib
from urllib import request
import re
import chardet
import mysql
import time
'''
找到http://www.jokeji.cn/list29_1.htm笑话列表
获取第一个笑话网页http://www.jokeji.cn/jokehtml/bxnn/2018080417455037.htm
遍历完所有笑话网页
获取下一个笑话列表,重复遍历,直至此分类笑话遍历完
遍历下一个分类
'''
class Spider():
    url='http://www.jokeji.cn/jokehtml/bxnn/2018073023294432.htm'
    header = {
        'User-Agent':'Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.99 Mobile Safari/537.36',
        'Accept-Encoding': '',
      'Referer':'http://www.jokeji.cn/list29_1.htm'
    }
    classifys=[] #list集合,存储笑话分类url

    #获取html文本
    def __fetch_content(self):
        cookie_html = request.Request(Spider.url,headers=Spider.header)
        cookie_html = request.urlopen(cookie_html)
        htmls=cookie_html.read()
        #使用chardet获取到htmls的编码格式
        encoding=chardet.detect(htmls)
        encoding=encoding['encoding']
        #不加ignore的时候总是出现字符转换错误,说明有非法字符,必须加上ignore忽略非法字符
        htmls=htmls.decode(encoding,'ignore')
        time.sleep(0.1)
        return htmls

    #获取笑话分类url
    def __analysis_classify(self):
        Spider.url='http://www.jokeji.cn/'
        Spider.header['Referer']='http://www.jokeji.cn/'
        htmls=self.__fetch_content()
        root_pattern='<div class="joketype l_left">([\s\S]*?)</div>'
        classify_pattern='<a href="([\s\S]*?)">'
        root_html=re.findall(root_pattern,htmls)
        Spider.classifys=re.findall(classify_pattern,str(root_html))

    #获取当前页面里的所有笑话,返回一个tuple
    def __analysis(self,htmls):
        anchors=[]
        root_pattern='([\s\S]*?)'
        juck_pattern='<P>\d、([\s\S]*?)</P>'
        root_html=re.findall(root_pattern,htmls)
        for html in root_html:
            jucks=re.findall(juck_pattern,html)
            #替换换行符
            c=re.compile('<[b|B][r|R]\s*/*>')
            for i in jucks:
                i=c.sub('\n',i)
                anchors.append(i)
                #i=i.replace('<BR>','\n')
            return anchors
        return anchors
    #爬取原创笑话
    def __analysis_yuanchuangxiaohua(self,url):
        url='http://www.jokeji.cn'+url
        pass

    #爬取分类下的笑话
    def __analysis_joke(self):
        Spider.header['Referer']='http://www.jokeji.cn/'
        root_pattern='<div class="list_title">([\s\S]*?)</div>'
        page_pattern='<a href="([\s\S]*?)"\s*target="_blank"\s*>'
        for classify in Spider.classifys:
            try:
                if '/yuanchuangxiaohua' in classify:
                    self.__analysis_yuanchuangxiaohua(classify)
                classify='http://www.jokeji.cn'+classify
                Spider.url=classify
                htmls=self.__fetch_content()
                #记录分类里面最大页面数           
                max_number=int(re.findall('[\s\S]*?(\d*?)\.htm">尾页</a>',htmls)[0])
                #开始遍历每一大页,一大页包含很多小页面,小页面里面才是笑话
            except BaseException:
                continue
            for bigpage_number in range(1,max_number+1):
                try:
                    bigpage_url=classify
                    temp=re.compile('(\d*).htm')
                    #更改url,因为分类下每一大页都是有规律的,都是.htm前面的数字从1加到最大页面数
                    bigpage_url=temp.sub(str(bigpage_number)+'.htm',bigpage_url)
                    #替换url
                    Spider.url=bigpage_url
                    htmls=self.__fetch_content()
                    root_html=re.findall(root_pattern,htmls)
                    #获取一大页里面的小页面的url地址
                    pages=re.findall(page_pattern,root_html[0])
                    #遍历所有小页面url,获取其中的笑话
                except BaseException:
                    continue
                for page in pages:
                    try:
                        Spider.url='http://www.jokeji.cn'+page
                        htmls=self.__fetch_content()
                        tuples=self.__analysis(htmls)
                        #插入到数据库
                        mysql.insert(tuples)
                    except BaseException:
                        continue


    def go(self):
        self.__analysis_classify()
        self.__analysis_joke()

spider=Spider()
spider.go()

  爬取笔者用的是Google浏览器,在这里个网址下按F12就能够见到网页源代码了,那时要深入分析这么些笑话大全的分类框的组织,以便利用python正则表明式获取到大家想要的音讯。

 

You may also like...

发表评论

电子邮件地址不会被公开。 必填项已用*标注

网站地图xml地图