Python程序设计习题5——网页爬虫

网页爬虫:爬取糗事百科内的段子(仅用于学习)

使用requests和BeautifulSoup库爬取网页

import requests
from bs4 import BeautifulSoup

headers = {'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 Safari/537.36'}

base_url = 'http://www.qiushibaike.com/8hr/page/'  # 设定一个网址不变的部分,然后我们只要每次在这个后面加数字就可以了   

for num in range(1, 3): # 设置循环,让num分别等于1-2,即爬取两页内容
    print('第{}页'.format(num))
    r = requests.get(base_url + str(num), headers = headers) #这里对网址进行一个修改

    content = r.text
    soup = BeautifulSoup(r.text, 'lxml')
    #找到段子的文字内容
    divs = soup.find_all(class_ = 'recmd-right')   

    for div in divs:
        if div.find_all(class_ = 'thumb'):
            continue
        joke = div.a.get_text()
        print(joke)
        print('------')

运行后可能会遇到UnicodeEncodeError的问题:

Python程序设计习题5——网页爬虫_第1张图片

原因可能是段子中包含的Emoji表情,需要进行处理。经过Google搜索后,使用以下代码进行处理:

import sys
non_bmp_map = dict.fromkeys(range(0x10000, sys.maxunicode + 1), 0xfffd)     
joke=joke.translate(non_bmp_map)

处理完成后,最终代码为:

import requests
from bs4 import BeautifulSoup
import sys

headers = {'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 Safari/537.36'}

base_url = 'http://www.qiushibaike.com/8hr/page/'  # 设定一个网址不变的部分,然后我们只要每次在这个后面加数字就可以了

#处理emoji表情
non_bmp_map = dict.fromkeys(range(0x10000, sys.maxunicode + 1), 0xfffd)     

for num in range(1, 3): # 设置循环,让num分别等于1-2
    print('第{}页'.format(num))
    r = requests.get(base_url + str(num), headers = headers) #这里对网址进行一个修改

    content = r.text
    soup = BeautifulSoup(r.text, 'lxml')
    #找到段子的文字内容
    divs = soup.find_all(class_ = 'recmd-right')   

    for div in divs:
        if div.find_all(class_ = 'thumb'):
            continue
        joke = div.a.get_text()
        
        #解决由emoji表情引起的UnicodeEncodeError问题
        joke=joke.translate(non_bmp_map)
        print(joke)
        print('------')

运行结果为:
Python程序设计习题5——网页爬虫_第2张图片

你可能感兴趣的:(编程笔记)