豆瓣Top250排名定向爬虫 实例介绍
功能描述
输入:书籍排名URL链接
输出:书籍排名信息的屏幕输出
技术路线:requests-bs4
定向爬虫:仅对输入URL进行爬取,不扩展爬取
程序的结构设计
- 步骤一:从网络上获取豆瓣电影排名网页内容 getHTMLText()
- 步骤二:提取网页内容中信息到合适的数据结构 fillDBList()
- 步骤三:利用数据结构展示并输出结果 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)