python爬蟲:爬取窮遊網的地點資料,世界那麼大,我想去看看。
阿新 • • 發佈:2020-12-21
本文的文字及圖片來源於網路,僅供學習、交流使用,不具有任何商業用途,版權歸原作者所有,如有問題請及時聯絡我們以作處理
一、前言
世界那麼大,我想去看看。
要麼讀書,要麼旅遊,身體和心靈必須有一個在路上。
想必大家心裡都向往旅遊,那麼旅遊中的行程安排和地區熱門景點有哪些呢?
可能都需要在網上去找旅遊攻略,今天就帶大家採集旅遊網站的景點資料。
二、課程亮點
- 系統分析網頁性質
- 結構化的資料解析
- csv資料儲存
三、所用到得庫
import csv import requests import parsel from concurrent.futures import ProcessPoolExecutorimport multiprocessing
四、環境配置
python 3.6
pycharm
requests
parsel
csv
五、爬蟲案例的一般實現步驟:
1.找資料所在的URL地址
2.傳送網路請求
3.資料的解析(我們需要的資料)
4.資料的儲存
六、找尋資料所在處
lock = multiprocessing.Lock() # 建立程序鎖物件 def send_request(url): """請求資料""" headers = { 'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/85.0.4183.121 Safari/537.36'} html_data = requests.get(url=url, headers=headers).text return html_data
七、完整程式碼:
def parse_data(html_data): selector = parsel.Selector(html_data) lis = selector.xpath('//ul[@class="plcCitylist"]/li') for li in lis: travel_place = li.xpath('.//h3/a/text()').get() # 目的地travel_people = li.xpath('.//p[@class="beento"]/text()').get() # 去過的人數 travel_hot = li.xpath('.//p[@class="pois"]/a/text()').getall() # 熱門景點 travel_hot = [hot.strip() for hot in travel_hot] travel_hot = '、'.join(travel_hot) travel_url = li.xpath('.//h3/a/@href').get() # 目的地詳情頁url travel_imgUrl = li.xpath('./p/a/img/@src').get() # 圖片url print(travel_place, travel_people, travel_hot, travel_url, travel_imgUrl, sep=' | ') yield travel_place, travel_people, travel_hot, travel_url, travel_imgUrl def save_data(data_generator): with open('窮遊網.csv', mode='a', encoding='utf-8', newline='') as f: csv_write = csv.writer(f) for data in data_generator: lock.acquire() # 加鎖 csv_write.writerow(data) lock.release() # 釋放鎖 def main(url): html_data = send_request(url) parse_result = parse_data(html_data) save_data(parse_result) if __name__ == '__main__': # main('https://place.qyer.com/china/citylist-0-0-1') with ProcessPoolExecutor(max_workers=13) as executor: for page in range(1, 172): url = f'https://place.qyer.com/china/citylist-0-0-{page}/' executor.submit(main, url)