欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Python爬虫——爬去必应壁纸(简化版)

程序员文章站 2024-03-23 08:05:34
...
# -*- coding:utf-8 -*-

from urllib.parse import urljoin
import requests
import re


# 请求页面文本内容
def get_html_page(_url: str):
    r = requests.get(_url)
    r.raise_for_status()
    r.encoding = r.apparent_encoding
    return r.text


# 得到下载榜页面
def get_ranking_urls(_min_index: int, _max_index: int):
    ranking_url_prefix = 'https://bing.ioliu.cn/ranking?p='
    for _i in range(_min_index, _max_index + 1):
        yield ranking_url_prefix + str(_i)


# 得到详情页面
def get_detail_urls(_min_index: int, _max_index: int):
    regex_detail_url = re.compile('<a class="mark" href="(.+?)">', re.S)
    for ranking_url in get_ranking_urls(_min_index, _max_index):
        ranking_html_page = get_html_page(ranking_url)
        for photo_page_url in regex_detail_url.findall(ranking_html_page):
            yield urljoin('https://bing.ioliu.cn/ranking?p=1', photo_page_url)


# 正则表达式筛选元素
def re_find_one(_page: str, _regex: type(re.compile(''))):
    _list = _regex.findall(_page)
    if len(_list) == 0:
        return ''
    else:
        return _list[0]


# 筛选页面信息
def get_detail_data(_url):
    regex_location = re.compile('<i class="icon icon-location"></i><em class="t">(.+?)<', re.S)
    regex_time = re.compile('<p class="calendari icon icon-calendar"><em class="t">(.+?)<', re.S)
    regex_sub = re.compile('<p class="sub">(.*?)</p>', re.S)
    regex_title = re.compile('<p class="title">(.+?)<', re.S)
    regex_photo_url = re.compile('<img class="target progressive__img progressive--not-loaded" src="(.+?)"', re.S)

    _page = get_html_page(_url)

    return dict(
        {
            'sub': re_find_one(_page, regex_sub),
            'photo': re_find_one(_page, regex_photo_url),
            'title': re_find_one(_page, regex_title),
            'location': re_find_one(_page, regex_location),
            'time': re_find_one(_page, regex_time)
        }
    )


def main():
    for detail_url in get_detail_urls(1, 2):
        detail_data = get_detail_data(detail_url)
        print(detail_data)


if __name__ == '__main__':
    main()

运行结果

Python爬虫——爬去必应壁纸(简化版) 

/usr/bin/python3.6 /home/dong/PycharmProjects/biYingWallpaperSpider/main.py
{'sub': '', 'photo': 'http://h1.ioliu.cn//bing/ChefchaouenMorocco_ZH-CN6127993429_1920x1080.jpg', 'title': '舍夫沙万的蓝色墙壁,摩洛哥 (© Tatsuya Ohinata/Getty Images)', 'location': '', 'time': '2019-07-08'}
{'sub': '新鲜的淡水水流与地中海的咸水水流在西班牙东北海岸相互交融,形成一个巨大的河口。在海岸边,度假村埃斯塔蒂特让游客有超级好的观察视野,从度假村就可以看到两片水域相遇的壮观场景,附近的海滩和内陆的蒙特格里山也成为游客们青睐的旅游胜地。', 'photo': 'http://h1.ioliu.cn//bing/FreshSalt_ZH-CN12818759319_1920x1080.jpg', 'title': '淡水和盐水在埃斯塔蒂特附近的三河河口交汇,西班牙 (© Yann Arthus-Bertrand/Getty Images)', 'location': '欧洲, 西班牙, 埃斯塔蒂特', 'time': '2017-04-06'}
{'sub': '正值清明时节,烟雾袅袅的黄山在朦胧细雨中若隐若现。清明节又叫踏青节,在仲春与暮春之交,也就是冬至后的第108天。是中国的传统节日,也是最重要的祭祀节日之一,是祭祖和扫墓的日子。来吧,让我们一起缅怀祖先,在这个细雨纷纷的日子里。', 'photo': 'http://h1.ioliu.cn//bing/QingMingHuangShan_ZH-CN12993895964_1920x1080.jpg', 'title': '黄山,中国安徽省 (© BJI/Blue Jean Images/Getty Images)', 'location': '亚洲, 中国, 黄山市', 'time': '2017-04-04'}
{'sub': '哈尔施塔特村周围的山上的盐矿现在是一个令人喜爱的旅游景点,但它曾经是当地经济的支柱。如今,这个像童话故事一般的小村庄每年吸引着成千上万的游客。因为小镇的美景极其珍贵,因此被评为全球最美小镇之一。2012年,中国甚至建造了一个完整的小镇复制品。', 'photo': 'http://h1.ioliu.cn//bing/HallstattAustria_PT-BR9407016733_1920x1080.jpg', 'title': '哈尔施塔特,奥地利 (© rudi1976/Alamy)', 'location': '欧洲, 奥地利, 哈尔施塔特', 'time': '2017-10-26'}
{'sub': '这片绿松石水域是印度洋一个特别迷人的角落,它一直拍打着莫桑比克巴扎鲁托群岛的白沙滩。自1971年起,这些岛屿就一直是巴扎鲁托国家公园的重要部分,同时这里也是非常重要的自然保护区,这里的生态系统和生活在这里的珍稀动物,以及无论是陆地上还是水下的珊瑚礁都受到了很好的保护。', 'photo': 'http://h1.ioliu.cn//bing/MozambiqueSandbar_EN-AU11463522567_1920x1080.jpg', 'title': '巴扎鲁托群岛,莫桑比克 (© Jody MacDonald/Offset)', 'location': '大洋洲, 莫桑比克, 巴扎鲁托群岛', 'time': '2018-04-16'}
{'sub': '今天是第48个世界地球日,2017年地球日的庆祝主题是“环境与气候文化”。活动包括了解人类如何适应全球生态系统,以及如何利用我们的立场和智慧帮助保持地球健康。毕竟,我们只有一个地球,所以对我们最有利的就是照顾好我们共同的家园。', 'photo': 'http://h1.ioliu.cn//bing/ZoomOut_ZH-CN4471982075_1920x1080.jpg', 'title': '从太空中拍摄到的地球 (© NOAA)', 'location': '亚洲', 'time': '2017-04-22'}
{'sub': '埃特勒塔是一个面临大西洋的海滨小镇,据说是法国最美丽的地方之一。埃特勒塔的海岸绵延数公里,面向大海一面的山崖被海水和海风削成笔直的峭壁,山崖是特别的白灰色,如同一堵巨大的白墙。小镇不大但是处处是美景,精致更不失美丽。', 'photo': 'http://h1.ioliu.cn//bing/EtretatSunrise_ZH-CN10891175350_1920x1080.jpg', 'title': '埃特勒塔小镇,法国诺曼底 (© Olha Rohulya/500px)', 'location': '欧洲, 法国, 埃特勒塔', 'time': '2017-06-06'}
{'sub': '国际天文日成立于1973年,当时的天文学家Doug Berger为了向大众普及天文知识,鼓励人们了解天文学,于是将四月中到五月中,靠近上弦月的一个周六定为国际天文日。', 'photo': 'http://h1.ioliu.cn//bing/RainierMilkyWay_ZH-CN9404321904_1920x1080.jpg', 'title': '雷尼尔山上空的璀璨银河, 雷尼尔山国家公园,华盛顿州 (© Brad Goldpaint/Aurora Photos)', 'location': '', 'time': '2016-05-14'}
{'sub': '塔斯曼冰川位于库克山的东边,从1990年开始,随着塔斯曼冰川开始慢慢融化,冰川小水池开始凝聚成大量的水才形成了塔斯曼湖。随着冰川每年平均退缩590英尺,塔斯曼湖的生长范围越来越广。科学家估计,供给塔斯曼湖的冰川将在未来几十年内完全消失。', 'photo': 'http://h1.ioliu.cn//bing/Aoraki_ZH-CN7776353328_1920x1080.jpg', 'title': '新西兰南岛的塔斯曼湖 (© UpdogDesigns/iStock/Getty Images Plus)', 'location': '亚洲, 新西兰, 库克山国家公园', 'time': '2017-03-04'}
{'sub': '萤火虫也许是约会最有效率的昆虫了,萤火虫自身产生的化学物质让尾巴发出光亮,当它们准备交配的时候,萤火虫会边发光边挥舞翅膀进行求偶。虽然这个过程非常短暂,但是也足够它们进行交配继而产卵繁育下一代了。', 'photo': 'http://h1.ioliu.cn//bing/LuciolaCruciata_ZH-CN9063767400_1920x1080.jpg', 'title': '被萤火虫照亮的小树林,日本四国岛 (© Hiroya Minakuchi/Minden Pictures)', 'location': '亚洲, 日本, 四国岛', 'time': '2017-01-24'}
{'sub': '如果提到《不能承受的生命之轻》的作者米兰·昆德拉,则会引起很多人的共鸣,没错,他的故乡就在南摩拉维亚。当你想到捷克*时,你可能会想到比尔森啤酒,因为这里是葡萄酒之乡,捷克总占地17000公顷的葡萄园中95%都在南摩拉维亚州。', 'photo': 'http://h1.ioliu.cn//bing/SouthMoravian_ZH-CN13384331455_1920x1080.jpg', 'title': '基约夫附近的南摩拉维亚风景,捷克*  (© Tomas Vocelka/500px)', 'location': '欧洲, 捷克, 基约夫', 'time': '2017-04-30'}
{'sub': '如果说巴厘岛的海岸人头攒动让您想逃离,那不如到金塔马尼小镇来偷得清闲。这里的风景十分美丽,沿途可以一路欣赏乡间风景。与海边那种现代化和商业化不同,小镇中更多的是一种朴实的田园风光。在镇上的不同村子中,还可以更加近距离的接触本土风情。', 'photo': 'http://h1.ioliu.cn//bing/PingganVillage_ZH-CN10035092925_1920x1080.jpg', 'title': '金塔马尼小镇,巴厘岛,印度尼西亚 (© Bobby Joshi/500px)', 'location': '亚洲, 印尼, 金塔马尼小镇', 'time': '2016-11-10'}
{'sub': '如果你喜欢公路旅行,开车到阿拉斯加的马他奴思卡冰川是个不错的选择。当你看到这个27英里长,4英里宽的冰隧道,那么你的徒步旅行就要开始了!跟着导游乘船沿着隧道划行,晶莹泛蓝的冰川透着丝丝寒气,把一路上的炎热感直接驱走。徜徉在这个美如仙境的冰川世界,满足惬意感油然而生!', 'photo': 'http://h1.ioliu.cn//bing/MatunuskaGlacier_ZH-CN11670641539_1920x1080.jpg', 'title': '马他奴思卡冰川里的冰隧道,阿拉斯加州 (© Lynn Wegener/Offset)', 'location': '北美洲, 美国, 马他奴思卡冰川', 'time': '2017-03-19'}
{'sub': '今晚我们将不能来到保加利亚南部的黑海海岸观看英仙座流星雨,但也许这张令人惊艳的照片会激励你去看看外面的天空。每年八月,斯威夫特-塔特尔彗星的碎片会进入地球大气层,形成英仙座流星雨。如果有条件的话,在8月24日之前的任何时候暂时远离城市灯光,在外面找一个安全的地方,让你的眼睛适应黑暗30分钟。再仰望天空的北部,或者找到英仙座,然后你会看到一场盛大光影的盛宴。', 'photo': 'http://h1.ioliu.cn//bing/BulgariaPerseids_EN-AU11585904087_1920x1080.jpg', 'title': '锡内莫雷茨村上空的英仙座流星雨,保加利亚 (© jk78/Getty Images)', 'location': '欧洲, 保加利亚, 锡内莫雷茨村', 'time': '2018-08-13'}
{'sub': 'Hallwylfjellet山峰是让极地能显示出比终年覆盖的冰雪更具粗犷气质的近200座山峰中的一座。从也被称为“秃头山”的顶峰,可以俯瞰整个阿德温山或是山谷,阿德温山谷也是斯瓦尔巴群岛为数不多的人类定居点之一。', 'photo': 'http://h1.ioliu.cn//bing/HallwylfjelletSunset_ZH-CN9300910376_1920x1080.jpg', 'title': '阿德温山谷的Hallwylfjellet山峰,挪威 (© Ethan Welty/Aurora Photos)', 'location': '欧洲, 挪威, 阿德温山谷', 'time': '2017-02-13'}
{'sub': '如果你问扎金索斯当地人关于沉船湾的情况,你也许会听到1983年海湾上搁浅的巨轮的传说。沉船湾就坐落在希腊的扎金索斯岛,陡峭的悬崖、清澈蔚蓝的海水、洁白的沙滩和横着的一条锈迹斑斑的老铁船让这里成为一片世外桃源。', 'photo': 'http://h1.ioliu.cn//bing/NavagioBeach_ZH-CN8854639142_1920x1080.jpg', 'title': '希腊扎金索斯的沉船湾 (© Maciej Tomków/Nimia)', 'location': '欧洲, 希腊, 沉船湾', 'time': '2017-05-03'}
{'sub': '张家界国家森林公园建立于1982年,占地近12,000英亩,是武陵源风景名胜区的一部分。公园保存着张家界最原始的生态环境,那里的动物种群为公园增添了几分神秘,在这种不寻常的生态系统中,有着来无影去无踪的云豹,它们经常神出鬼没,如果你有幸看到它,可以说是非常幸运了!', 'photo': 'http://h1.ioliu.cn//bing/ZhangjiajieLandscape_EN-AU12445284069_1920x1080.jpg', 'title': '张家界国家森林公园,中国湖南省 (© aphotostory/Shutterstock)', 'location': '亚洲, 中国, 张家界', 'time': '2018-04-11'}
{'sub': '', 'photo': 'http://h1.ioliu.cn//bing/SakuraFes_ZH-CN1341601988_1920x1080.jpg', 'title': '目黑川上盛开的樱花,日本东京 (© taketan/Getty Images)', 'location': '', 'time': '2019-03-26'}
{'sub': '新西兰南阿尔卑斯山脉的冰川侵蚀了下面的基岩,并将石头粉碎成“岩石粉”,然后流入了普卡基湖的水域。粉状微粒很轻,使其能够悬浮在水中,把湖水变成了一颗闪闪发光的蓝色宝石。令人震惊的是,导演彼得·杰克逊选择了普卡基湖作为《霍比特人》三部曲的主要场景拍摄地。', 'photo': 'http://h1.ioliu.cn//bing/LakePukaki_EN-AU9412206565_1920x1080.jpg', 'title': '普卡基湖,新西兰南岛 (© Martin Heck/Nimia)', 'location': '欧洲, 新西兰, 南岛', 'time': '2017-09-27'}
{'sub': '当你参观奥地利卡普伦市,来到阿尔卑斯山脉的脚下,在那里,有着令人惊叹的风景——两座大型水力发电大坝,这些水坝已经形成深水库,其中就包括图中的莫瑟博登水库。这些水坝在1920年开始建造,但由于二战耽搁了进程,最后在马歇尔计划下这座大坝终于得以建成。', 'photo': 'http://h1.ioliu.cn//bing/KaprunDam_ZH-CN9638804777_1920x1080.jpg', 'title': '卡普伦附近的莫瑟博登水库和穆塞尔坝,奥地利 (© Shutterstock)', 'location': '欧洲, 奥地利, 卡普伦', 'time': '2017-06-05'}
{'sub': '今天是国际冲浪日,我们来到了西班牙美丽的特内里费岛,这里有着变化多端刺激惊险的白色海浪,是冲浪爱好者的玩乐天堂。这张层叠汹涌的海浪鸟瞰图就拍摄于这里,那巨大的声响刺激着每个冲浪者的多巴胺,如果你仔细观察,可以看到左下角有勇敢无畏的逐浪者,他们以追逐海浪来获得更加新鲜刺激的冲浪体验!', 'photo': 'http://h1.ioliu.cn//bing/SpainSurfer_EN-AU11271138486_1920x1080.jpg', 'title': '冲浪者追逐浪潮的鸟瞰图,西班牙加那利群岛特内里费岛 (© Sergio Villalba/Aurora Photos)', 'location': '欧洲, 西班牙, 特内里费岛', 'time': '2018-06-16'}
{'sub': '眼前这个美丽的银河,点点星辰的奇幻景致,是从缅因州巴港附近的海岸看到的。巴港位于美国最东边的缅因州,这个海滨村庄是前往缅因州芒特迪瑟特岛的必经之路,这里也理所当然的成为游客的天堂。而且,既然你在这里,不妨也来阿卡迪亚国家公园探探险,那里有着更为美好的景致等着你!', 'photo': 'http://h1.ioliu.cn//bing/BarHarborCave_EN-AU8598700153_1920x1080.jpg', 'title': '从缅因州巴港附近的海岸看到的银河 (© Adam Woodworth/Aurora Photos)', 'location': '北美洲, 美国, 巴港', 'time': '2018-01-17'}
{'sub': '当你在阿拉斯加山脉附近的麦田上空看到翩翩起舞的沙丘鹤时,它们其实是在进行大型的迁徙。今天是国际候鸟日,我们可以通过发现更多的鸟类品种或者了解哪些鸟类迁移到您的地方来庆祝这一节日,如果你也是鸟类保护者,那么快加入我们的队伍吧!', 'photo': 'http://h1.ioliu.cn//bing/DeltaJunction_ZH-CN9901755694_1920x1080.jpg', 'title': '成千上万只沙丘鹤在阿拉斯加山脉附近的麦田上空翩翩起舞,美国阿拉斯加州 (© Yva Momatiuk and John Eastcott/Minden Pictures)', 'location': '北美洲, 美国, 阿拉斯加山脉', 'time': '2017-05-13'}
{'sub': '白露里治奥古城的历史可以追溯至2500年之前,是一座由伊特鲁里亚人创建的村庄。白露里治奥古城位于一座孤山之上,地势十分险峻,加上所在的山峰不断出现土石崩落的情况,建筑面临倒塌危险。原本是贸易通道上的繁荣小城,因为地震等各种自然因素渐渐的成为一座孤岛,如今只有一座桥和外界连接。', 'photo': 'http://h1.ioliu.cn//bing/CivitadiBagnoregio_ZH-CN12942138675_1920x1080.jpg', 'title': '白露里治奥古城,意大利 (© Westend61/SuperStock)', 'location': '欧洲, 意大利, 白露里治奥古城', 'time': '2017-04-26'}

Process finished with exit code 0

 

相关标签: 爬虫