zoukankan      html  css  js  c++  java
  • python爬取糗事百科段子

    今天尝试了一下用python3加正则表达式爬取糗事百科的内容,让我们一起来看一下:

    我们的目标是爬取用户名和所对应的段子内容

    首先来观察网站,进入糗事百科首页。

    (1)鼠标放在用户名上右键点“检查”:

    通过观察可以得到用户名的正则表达式:userpart为'target="_blank" onclick.+?<h2>(.*?)</h2>'

    (2)鼠标放在段子内容上右键点“检查”:

    通过观察可以得到段子内容的正则表达式:contentpart为'div class="content".*?<span>(.*?)</span>'

     (3)把用户名和列表放进字典存储到json格式文本里面

    (4)代码可以成功运行,如有疑问请留言

    import urllib.request
    import re
    import json
    def getcontentt(url,page):
        headers = (
            "User-Agent", "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3282.186 Safari/537.36"
    )
        opener=urllib.request.build_opener()
        opener.addheaders=[headers]
        urllib.request.install_opener(opener)
        data=urllib.request.urlopen(url).read().decode('utf-8')
    
        userpart='target="_blank" onclick.+?<h2>(.*?)</h2>'
        contentpart='div class="content".*?<span>(.*?)</span>'
        userlist=re.compile(userpart,re.S).findall(data)
        contentlist=re.compile(contentpart,re.S).findall(data)
        #print(userlist[2])
        #print(contentlist[0])
        x=0
        # for content in contentlist:
        #     content=content.replace('
    ','')
        #     name="content"+str(x)
        #     exec(name+'=content')
        #     x+=1
        # y=1
        # for user in userlist:
        #     name="content"+str(y)
        #     print("用户"+str(page)+str(y)+"是:"+user)
        #     print("内容是:")
        #     exec("print("+name+")")
        #     print("
    ")
        #     y+=1
    
        for user in userlist:
            user=user.replace("
    ","")
            print("用户名:"+user)
            content=contentlist[x].replace("
    ","")
            print("内容是:"+content)
            print("
    ")
            items={'用户名:':user,"内容:":content}
            #把字典写入json文件
            items=json.dumps(items,ensure_ascii=False).encode('utf-8')
            with open("E:/爬虫练习/pj1/文件/duanzi.json", 'ab+')as f:
                f.write(items+b'
    ')
            x=x+1
    
    for i in range(1,2):
        url="https://www.qiushibaike.com/8hr/page/"+str(i)+'/'
        getcontentt(url,i)
  • 相关阅读:
    unity free asset
    Unity3d Serialize问题
    野蛮能带来繁荣是怎么回事?
    如何给unity3d工程加入依赖的android工程
    unity3d 导入google play services插件工程
    NGUI中UILabel使用url标签的一个bug
    数据结构
    git命令
    面试算法经典问题
    Http Client 源码分析
  • 原文地址:https://www.cnblogs.com/dahuang123/p/8523653.html
Copyright © 2011-2022 走看看