豆瓣Top250排名定向爬虫 实例介绍

功能描述
输入:书籍排名URL链接
输出:书籍排名信息的屏幕输出

技术路线:requests-bs4

定向爬虫:仅对输入URL进行爬取,不扩展爬取

程序的结构设计

  1. 步骤一:从网络上获取豆瓣电影排名网页内容 getHTMLText()
  2. 步骤二:提取网页内容中信息到合适的数据结构 fillDBList()
  3. 步骤三:利用数据结构展示并输出结果 printDBList()

思路:首先对页面进行分析,F12查看源代码,我们发现书的信息都在 ol 标签中,而每一本书又包含在一个 li 标签中,所以我们对 ol 标签进行一个遍历,然后找到对应的信息标签,详细解释见代码。

import requests
from bs4 import BeautifulSoup
import bs4


def getHTMLText(url):
    try:
    	# 模拟浏览器发送请求
        kv = {
   'user-agent': 'Mozilla/5.0'}
        r = requests.get(url, headers=kv, timeout=10)
        r.raise_for_status()
        # 将默认编码改为解析文本获得的编码
        r.encoding = r.apparent_encoding
        return r.text
    except:
        return ''


def fillDBList(DBList, html):
    soup = BeautifulSoup(html, 'html.parser')
    for li in soup.find('ol').children:
    	# 判断li是不是标签元素
        if isinstance(li, bs4.element.Tag):
            rank = li('em')
            name = li('span', class_='title')
            score = li('span', class_='rating_num')
            DBList.append([rank[0].string, name[0].string, score[0].string])


def printDBList(DBList, num):
    # 中文对齐问题解决,采用中文字符的空格填充 chr(12288)
    tplt = '{0:^10}\t{1:{3}^10}\t{2:^10}'
    print(tplt.format('排名', '电影名', '评分', chr(12288)))
    for i in range(num):
        d = DBList[i]
        print(tplt.format(d[0], d[1], d[2], chr(12288)))


if __name__ == '__main__':
    DBInfo = []
    url = 'https://movie.douban.com/top250'
    html = getHTMLText(url)
    fillDBList(DBInfo, html)
    printDBList(DBInfo, 20)