Python 爬虫 —— 糗事百科爬虫实战

内容选自韦玮著《精通 Python 网络爬虫——核心技术、框架与项目实战》P80

import requests

import re


def getContent(url, page):
    # 模拟成浏览器
    headers = {"User-Agent":
                   "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.113 Safari/537.36"}

    data = requests.get(url, headers=headers).text

    # 构建对应用户提取的正则表达式(非贪婪模式)
    user_pattern = '<h2>(.*?)</h2>'
    # 构建段子内容提取的正则表达式
    content_pattern = '<div class="content">(.*?)</div>'

    # 寻找出所有的用户
    user_list = re.compile(user_pattern, re.S).findall(data)
    # 寻找出所有的内容
    content_list = re.compile(content_pattern, re.S).findall(data)

    print("用户的数量", len(user_list))
    print("内容的数量", len(content_list))

    print("*" * 25)

    x = 1
    for content in content_list:
        content = content.replace("\n", "")
        # 用字符串作为一个变量名,先将对应的字符串赋给一个变量
        name = "content" + str(x)
        # 通过 exec() 函数实现用字符串作为变量并且复制
        exec(name + "=content")
        x += 1

    y = 1
    for user in user_list:
        user = user.replace("\n", "")
        name = "content" + str(y)
        print("用户(" + str(page) + "," + str(y) + ")是:" + user)
        print("内容是:")
        exec("print(" + name + ")")
        print("\n")
        y += 1
    print("-" * 100)


for i in range(1, 11):
    url = "https://www.qiushibaike.com/8hr/page/%s/" % str(i)
    print(url)
    getContent(url, i)

对代码的解释:
1、网页源代码的获取,如果使用 urllib.request 函数,则可以参考如下代码:

# 模拟成浏览器
headers = ("User-Agent","Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.113 Safari/537.36")

opener = urllib.request.build_opener()

opener.addheaders = [headers]

# 将 opener 安装为全局
urllib.request.install_opener(opener)

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

2、url 链接其实我们可以多点几页,自己发现规律,这一点并没有什么技术含量;

3、exec 函数的作用是执行字符串形式的表达式, eval 函数的作用是执行字符串形式的代码。

这里写图片描述

(1)eval(str [,globals [,locals ) 函数将字符串 str 当成有效 Python 表达式来求值,并返回计算结果;
(2)exec() 函数将字符串 str 当成有效的 Python 表达式来执行,不返回计算结果。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值