源码源码:源码链接
需求和目标
爬取网站:上海地铁的百科词条
获取的爬虫数据结果保存样式如下
{
'莘庄站':
{'subway': ['上海地铁1号线', '上海地铁5号线'],
'neibour': ['外环路站', '春申路站']},
'莲花路站':
{'subway': ['上海地铁1号线'],
'neibour': ['外环路站', '锦江乐园站']}
}
爬取的数据保存中这种格式是为了方便后续处理
根据爬取的数据可以根据起点和终点规划出行路线
爬虫步骤:
爬取上海地铁的百科词条,获取到地铁线路的名称和链接
爬取地铁详情页,提取站点信息并保存
爬虫部分
class ShangHaiSubway:
def __init__(self):
self.headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.149 Safari/537.36'
}
self.url = 'https://baike.baidu.com/item/%E4%B8%8A%E6%B5%B7%E5%9C%B0%E9%93%81/1273732?fr=aladdin'
self.station_dict = defaultdict(list)
def get_xpath_obj(self, url):
'''根据url获取xpath对象'''
response = requests.get(url, headers=self.headers)
text = response.content.decode()
return etree.HTML(text)
def get_subways(self, xpath_obj):
'''解析xpath 对象,获取地铁的链接和地铁名称'''
subways = xpath_obj.xpath('//table[@log-set-param="table_view"][1]//tr/td//a')
for subway in subways:
name = subway.xpath('./text()')