天天看点

Python基础学习之糗事百科爬虫思路如下:程序

思路如下:

(1)分析各页间的网址规律,通过for循环实现多页内容的爬取

(2)构建一个函数,用来获取用户和内容

注意:

程序中用到了exec()函数,exec()函数就是执行储存在字符串或文件中的Python语句。在通过for循环中遍历段子内容分别赋值给对应遍历,变量名是有规律的,格式为:content+顺序号

程序

import urllib.request
import re
def getcontent(url,page):
    headers = ("User-Agent","Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.121 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")
    # .*? 是一个固定的搭配,.和*代表可以匹配任意无限多个字符,加上?表示使用非贪婪模式进行匹配
    # (.*?)代表一个分组
    userpat = '<div class="author clearfix">.*?<img src=".*?" alt="(.*?)">'
    # userpat = '<div class="author clearfix">.*?<h2>(.*?)</h2>'
    contentpat = '<div class="content">.*?<span>(.*?)</span>'
    # re.S匹配任意符号,包括换行符
    userlist = re.compile(userpat,re.S).findall(data)
    contentlist = re.compile(contentpat,re.S).findall(data)
    x = 1
    # 通过for循环遍及内容分别赋给对应的变量
    for content in contentlist:
        content = content.replace("\n","")
        name = "content"+str(x)
        # 通过exec()函数实现用字符串作为变量名并赋值
        exec(name+'=content')
        x += 1
        # 下面调试两个输出结果显示的结果是一样的
        # print(content)
        # exec("print("+name+")")

    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 i in range(1,4):
    url = "https://www.qiushibaike.com/text/page/"+str(i)
    getcontent(url,i)
           

输出结果显示:

Python基础学习之糗事百科爬虫思路如下:程序

以上是还存在不足,后期再更改。

继续阅读