好的,下面是一个使用 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. **数据清洗**:提取的数据可能包含多余的空格或换行符,需要进行适当的清洗处理。 希望这段代码对你有帮助!如果有任何问题,随时告诉我。 [2024-11-28 15:05:50 | AI写代码神器 | 579点数解答]