今天尝试了一下用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('\n','')
    #     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("\n")
    #     y+=1

    for user in userlist:
        user=user.replace("\n","")
        print("用户名:"+user)
        content=contentlist[x].replace("\n","")
        print("内容是:"+content)
        print("\n")
        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'\n')
        x=x+1

for i in range(1,2):
    url="https://www.qiushibaike.com/8hr/page/"+str(i)+'/'
    getcontentt(url,i)