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

假如我们想爬取糗事百科(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")

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

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

    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爬虫糗事百科的抓取)