吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 1878|回复: 13
收起左侧

[Python 原创] 爬取北京公交线路

[复制链接]
duokebei 发表于 2022-11-15 08:31
本帖最后由 duokebei 于 2022-11-16 08:19 编辑

前言


在跟着B站学完爬虫以后,想着去爬一个相对有用的东西去巩固一下基础,同时在吾爱发文章一来方便自己查阅,二来用来分享,给他人借鉴,写的不是太好,还望大家多多包含。


简介


这次选取的网页主要爬的是北京公交各个路线,话不多说,直接上源码:

[Python] 纯文本查看 复制代码
# 作者: duokebei
# 开发时间: 2022/11/3  17:16
import random
import time
import traceback

import requests
from lxml import etree

href = 'https://beijing.8684.cn'
adress = ['/list1', '/list2', '/list3', '/list4', '/list5', '/list6', '/list7', '/list8', '/list9', '/listB',
          '/listC',
          '/listD', '/listF', '/listG', '/listH', '/listK', '/listL', '/listM', '/listP', '/listS', '/listT',
          '/listX', '/listY', '/listZ']


# 构造每一个页面的url
def page_url(n):
    url = href + adress[n]
    return url


def request(url):
    headers = {
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/107.0.0.0 Safari/537.36'
    }
    proxies_pool = [
        {'http': '223.96.90.216:8085'},
        {'http': '121.13.252.58:41564'}
    ]
    proxies = random.choice(proxies_pool)
    res = requests.get(url=url, headers=headers, proxies=proxies)
    return res.text


# 获取每一条路线的链接
def routeLink(content):
    etree_html = etree.HTML(content)
    link = etree_html.xpath("//div[@class='list clearfix']/a/@href")
    return link


# 获取公交车路线
def route(content):
    etree_html = etree.HTML(content)
    path = etree_html.xpath('//div[@class="bus-lzlist mb15"]//li/a/@aria-label')
    return path


# 获取路线名字
def routeName(content):
    etree_html = etree.HTML(content)
    name = etree_html.xpath("//div[@class='list clearfix']/a/@title")
    return name


# 构建获取路线的链接
def page_url_02(link, k):
    # k代表第几个线路
    url = href + link[k]
    # print(url)
    return url


def routeSize(link):
    return len(link)


# 获取都有哪些开头的路线
def parse(content):
    etree_html = etree.HTML(content)
    name = etree_html.xpath("//div[@class='category']/a/text()")
    return name


for j in range(len(adress)):
    try:
        url_01 = page_url(j)  # 创建爬取路线的链接
        content_01 = request(url_01)  # 获取源码
        name = parse(content_01)
        route_link = routeLink(content_01)  # 获取各个路线链接
        print("北京公交以{}字开头的路线如下:".format(name[j]))
        for i in range(routeSize(route_link)):
            url_01 = page_url(j)  # 创建爬取路线的链接
            content_01 = request(url_01)  # 获取源码
            initial = parse(content_01)  # 获取都有哪些开头的路线
            route_link = routeLink(content_01)  # 获取各个路线链接
            route_name = routeName(content_01)  # 获取路线名字
            url_02 = page_url_02(route_link, i)  # 构建获取路线的链接
            content_02 = request(url_02)  # 获取有路线的源码
            journey = route(content_02)  # 得到路线
            print(route_name[i] + "为:{}".format(journey))
            time.sleep(10)
    except:
        print(traceback.format_exc())



补充
最终效果如下,你可以自己进行保存到本地





我写的不是很好,希望大家指出我的错误,谢谢!

效果图

效果图

免费评分

参与人数 3吾爱币 +7 热心值 +3 收起 理由
limite + 1 + 1 我很赞同!
苏紫方璇 + 5 + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩!
luozi1653 + 1 + 1 热心回复!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

lbg2222000 发表于 2022-11-16 21:37
谢谢分享
Arctic7 发表于 2022-11-16 09:17
建议把数据输出到EXCEL,方便后续分析。
另外配置项应该单独抽出来,以便后续公交路线变化好简单调整。
hu981129wapj 发表于 2022-11-16 17:53
j717013225 发表于 2022-11-15 10:53
实践才是真理呀
000932 发表于 2022-11-15 11:18
学习了,感谢分享
constwm 发表于 2022-11-15 13:15
这也可以啊??牛逼
fdsuf4 发表于 2022-11-15 14:07
爬完之后的效果也发出来看下呀
 楼主| duokebei 发表于 2022-11-16 08:16
fdsuf4 发表于 2022-11-15 14:07
爬完之后的效果也发出来看下呀

好的,感谢提醒,第一次发望包涵
 楼主| duokebei 发表于 2022-11-16 08:21
fdsuf4 发表于 2022-11-15 14:07
爬完之后的效果也发出来看下呀

好的,已经发出来了
 楼主| duokebei 发表于 2022-11-16 08:26
fdsuf4 发表于 2022-11-15 14:07
爬完之后的效果也发出来看下呀

好的,已经发了
liudage 发表于 2022-11-16 12:08
厉害厉害
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-25 02:34

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表