Scrapy 助力!抓取北京公交官网 1 - 9 开头线路全信息
好的,下面是一个使用 Scrapy 框架爬取北京公交官方网站的示例代码。这个爬虫会抓取以 1-9 开头的北京公交线路信息,包括线路名称、运行时间、票价、所属公交公司、更新时间以及往返路线站点等信息。 ```python import scrapy from scrapy.linkextractors import LinkExtractor from scrapy.spiders import CrawlSpider, Rule class BusSpider(CrawlSpider): name = 'bus_spider' allowed_domains = ['beijing.8684.cn'] start_urls = ['https://beijing.8684.cn/'] rules = ( Rule(LinkExtractor(allow=r'/line\d+'), callback='parse_bus_line', follow=True), ) def parse_bus_line(self, response): # 提取线路名称 line_name = response.css('.bus_i_t1 h1::text').get().strip() # 提取运行时间 run_time = response.css('.bus_i_content .time span::text').get().strip() # 提取票价 ticket_price = response.css('.bus_i_content .price span::text').get().strip() # 提取所属公交公司 bus_company = response.css('.bus_i_content .company span::text').get().strip() # 提取更新时间 update_time = response.css('.bus_i_content .update span::text').get().strip() # 提取往返路线站点 go_stops = response.css('.bus_site_layer .up .site-list span a::text').getall() back_stops = response.css('.bus_site_layer .down .site-list span a::text').getall() yield { 'line_name': line_name, 'run_time': run_time, 'ticket_price': ticket_price, 'bus_company': bus_company, 'update_time': update_time, 'go_stops': go_stops, 'back_stops': back_stops, } # 运行爬虫 # scrapy crawl bus_spider ``` ### 需要注意的逻辑点: 1. **动态加载内容处理**:如果网站使用了 AJAX 动态加载内容,可能需要使用 `scrapy-splash` 或 `Selenium` 来处理动态加载的内容。 2. **反爬虫机制**:有些网站会有反爬虫机制,如频繁请求可能会被封 IP。可以设置 `DOWNLOAD_DELAY` 来减慢请求速度,或者使用代理 IP。 3. **数据清洗**:提取的数据可能包含多余的空格或换行符,需要进行适当的清洗处理。 希望这段代码对你有帮助!如果有任何问题,随时告诉我。 ######[AI写代码神器 | 579点数解答 | 2024-11-28 15:05:50]
- "Scrapy-Redis-Sentinel 0.7.1 Version Conflict: How to Resolve Redis and Redis-Py-Cluster Mismatch"(阿里通义 | 245点数解答 | 2024-03-01 14:08:38)314
- Java:抽象类 Vehicle 及子类 Car、MotorBike 实战演示(讯飞星火 | 440点数解答 | 2024-06-06 23:18:54)317
- 用 Pandas 深度剖析数据:从读取到统计分析全流程实战(GPT | 642点数解答 | 2024-06-30 15:39:49)363
- 用 Pandas 深入分析招聘数据:从数据读取到可视化全流程解析(GPT | 1539点数解答 | 2024-06-30 15:56:50)376
- Linux开发:用grep命令显示 /etc/inittab 中特定以#开头的行(百度文心 | 179点数解答 | 2023-11-09 18:44:42)278
- Java实现:轻松判断字符串是否以“#”开头! (阿里通义 | 131点数解答 | 2024-03-15 14:18:00)249
- Python代码:判断小写字符串是否以 'b' 开头并完成拼接输出(字节豆包 | 80点数解答 | 2025-12-06 20:44:02)42
- C++ 实现:判断 N 个数在二进制、八进制、十进制、十六进制下的可能性(字节豆包 | 812点数解答 | 2026-01-02 19:28:20)51
- Python实现:判断数字在二进制、八进制、十进制、十六进制中的可能性(字节豆包 | 405点数解答 | 2026-01-02 19:43:33)49
- 巧用 Python:判断数字在二进制、八进制、十进制、十六进制中的可能性(字节豆包 | 251点数解答 | 2026-01-02 19:44:35)51
- Python 实现:轻松将不同进制数(2 - 16 进制)转换为十进制数 (字节豆包 | 336点数解答 | 2026-01-02 19:45:07)53
- Java 递归爬取国家统计局地区 <tr><td> 信息:附完整代码与实现解析( | 1006点数解答 | 2024-05-20 14:15:53)271