1. 程式人生 > 實用技巧 >一篇文章教會你利用Python網路爬蟲獲取窮遊攻略

一篇文章教會你利用Python網路爬蟲獲取窮遊攻略

【一、專案背景】

窮遊網提供原創實用的出境遊旅行指南、攻略,旅行社群和問答交流平臺,以及智慧的旅行規劃解決方案,同時提供簽證、保險、機票、酒店預訂、租車等線上增值服務。窮遊“鼓勵和幫助中國旅行者以自己的視角和方式體驗世界”。

今天教大家獲取窮遊網的城市資訊,使用Python將資料寫入csv文件。

【二、專案目標】

實現將獲取對應的城市、圖片連結、熱點、批量下載 儲存csv文件。

【三、涉及的庫和網站】

1、網址如下:

https://place.qyer.com/south-korea/citylist-0-0-{}

2、涉及的庫:requestsl****xml、fake_useragent、time、csv

【四、專案分析】

首先需要解決如何對下一頁的網址進行請求的問題。可以點選下一頁的按鈕,觀察到網站的變化分別如下所示:

https://place.qyer.com/south-korea/citylist-0-0-1

https://place.qyer.com/south-korea/citylist-0-0-2

https://place.qyer.com/south-korea/citylist-0-0-3

觀察到只有citylist-0-0-{}/變化,變化的部分用{}代替,再用for迴圈遍歷這網址,實現多個網址請求。

【五、專案實施】

1、我們定義一個class類繼承object,然後定義init方法繼承self,再定義一個主函式main繼承self。準備url地址。

import requests,os
from lxml import etree
import random
import time
from fake_useragent import UserAgent


class Travel(object):
    def __init__(self):
        self.url = "https://place.qyer.com/south-korea/citylist-0-0-{}/"
    def main(self):
        pass
if __name__ == '__main__':
    spider= Travel()
    spider.main()

2、隨機產生UserAgent。

      self.film_list = []
      ua = UserAgent(verify_ssl=False)
        for i in range(1, 50):
            self.film_list.append(ua.chrome)
            self.Hostreferer = {
            'User-Agent': random.choice(self.film_list)
        }

3、多頁請求。

        startPage = int(input("起始頁:"))
        endPage = int(input("終止頁:"))
        for page in range(startPage, endPage + 1):
            url = self.url.format(page)

4、定義get_page方法,進行資料請求。

  '''資料請求'''
    def get_page(self, url):
        html = requests.get(url=url, headers=self.Hostreferer).content.decode("utf-8")
        self.page_page(html)
        # print(html)//網頁
        # print(self.headers)//構造頭

5、定義page_page,xpath解析資料, for迴圈遍歷陣列。

在谷歌瀏覽器上,右鍵選擇開發者工具或者按F12。右鍵檢查,xpath找到對應資訊的欄位。如下圖所示。

   parse_html = etree.HTML(html)
    image_src_list = parse_html.xpath('//ul[@class="plcCitylist"]/li') 
    for i in image_src_list:
            b = i.xpath('.//h3//a/text()')[0].strip()
            c = i.xpath('.//p[@class="beento"]//text()')[0].strip()
            d = i.xpath('.//p[@class="pics"]//img//@src')[0].strip()

6、定義csv檔案儲存資料,寫入文件。

       # 建立csv檔案進行寫入
        csv_file = open('scrape.csv', 'a', encoding='gbk')
        csv_writer = csv.writer(csv_file)
        csv_writer.writerow([b, c, d])
        csv_file.close()

7、在main方法呼叫。

   def main(self):
        for i1 in range(1, 25):
            url = self.url.format(i1)
            # print(url)
            html = self.get_page(url)

            time.sleep(2)
            print("第%d頁" % i1)

8、time模組,設定時間延遲。

           time.sleep(2)

【六、效果展示】

1、點選執行,輸入起始頁,終止頁。

2、將下載成功資訊顯示在控制檯。

3、儲存csv文件。

【七、總結】

1、不建議抓取太多資料,容易對伺服器造成負載,淺嘗輒止即可。

2、希望通過這個專案,能夠幫助大家對csv文件處理有進一步的瞭解。

3、本文基於Python網路爬蟲,利用爬蟲庫,實現窮遊網的獲取。實現的時候,總會有各種各樣的問題,切勿眼高手低,勤動手,才可以理解的更加深刻。

4、可以根據自己的需要選擇自己的喜歡的城市獲取自己想要的有效資訊 。

5、需要本文原始碼的小夥伴,後臺回覆“窮遊攻略”四個字,即可獲取。

看完本文有收穫?請轉發分享給更多的人

IT共享之家

入群請在微信後臺回覆【入群】


想學習更多Python網路爬蟲與資料探勘知識,可前往專業網站:http://pdcfighting.com/