美文网首页
每天一个小Demo-Python爬虫糗事百科的抓取

每天一个小Demo-Python爬虫糗事百科的抓取

作者: 零度1028 | 来源:发表于2018-04-25 16:46 被阅读0次

    假如我们想爬取糗事百科(http://www.qiushibaike.com/)上的段子,今天的Demo如下:

    import re

    import urllib.request

    #爬取页面链接

    def get_content(url,page):

        # 模拟成浏览器

        headers = ("User-Agent", "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2785.104 Safari/537.36 Core/1.53.4882.400 QQBrowser/9.7.13059.400")

        opener = urllib.request.build_opener()

        opener.addheaders = [headers]

        # 将opener安装为全局

        urllib.request.install_opener(opener)

        html_info = urllib.request.urlopen(url).read().decode("utf-8")

        #构建对应用户提取的正则表达式,要根据网站实际情况改变

    style="min-height:null;min-width:null;"

        # 构建段子内容提取的正则表达式

        content_pat = '

    (.*?)'

        # 寻找出所有的用户

        user_list = re.compile(user_pat, re.S).findall(html_info)

        # 寻找出所有的内容

        cotent_list = re.compile(content_pat, re.S).findall(html_info)

        # 通过for循环遍历段子内容并将内容分别赋给对应的变量

        x = 1

        for content in cotent_list:

            content = content.replace("\n", "")

            # 用字符串作为变量名,先将对应字符串赋给一个变量

            name = "content" + str(x)

            # 通过exec()函数实现用字符串作为变量名并赋值

            exec(name+'=content')

            x += 1

        y = 1

        # 通过for循环遍历用户,并输出该用户对应的内容

        for user in user_list:

            name = "content" + str(y)

            print("用户" + str(page) + str(y) + "是:" + user)

            print("内容是:")

            exec("print("+name+")")

            print("\n")

            y += 1

    #分别获取各页的段子,通过for循环可以获取多页

    for i in range(1, 10):

        # https://www.qiushibaike.com/8hr/page/5/

        url = "https://www.qiushibaike.com/8hr/page/" + str(i)

        get_content(url, i)

    爬虫的原理基本都是相同的,主要不同体现在数据的过滤,也就是正则表达式的不同,所以我们需要观察网页代码的特性,取出所需的内容,然后再进行筛选,组合。

    相关文章

      网友评论

          本文标题:每天一个小Demo-Python爬虫糗事百科的抓取

          本文链接:https://www.haomeiwen.com/subject/kyyylftx.html