Python爬取中國網站排名並寫入文件【2020】

why ? 昨天看中國網站總排名,發現每頁只有30個排名,一頁頁翻太慢了,於是準備用Python將排名爬取下來 ,並保存到文件中。
爬取網站 :
https://top.chinaz.com/all/

源碼

import requests
import re
from requests.exceptions import RequestException

# 將爬取的代理設置成瀏覽器,針對一些反爬網站
headers = {
    'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.116 Safari/537.36'
}


# 獲取一頁的內容
def get_one_page(targetUrl):
    try:
        response = requests.get(targetUrl, headers)
        if (response.status_code == 200):  # 狀態碼 =200 ,說明爬取正常
            parse_one_page(response.content.decode())
        return None
    except RequestException:
        return None


# 通過正則表達式獲取需要的數據
def parse_one_page(target_text):
    pattern = re.compile(r'<a href=".*? target="_blank" class="pr10 fz14">(.*?)</a>')
    myList = pattern.findall(target_text)
    result.extend(myList)

# 爬取每一頁內容
def crawl_each_url():
    before = "https://top.chinaz.com/all/index_"
    after = ".html"
    get_one_page("https://top.chinaz.com/all/")  # 獲取第一頁所需的元素

    for i in range(2, 51):  # 獲取第 2 - 50 頁內容
        get_one_page(before + str(i) + after)


# 將數據保存到當前路徑下的 "中國網站排名.txt"
def write_to_file(result_text):
    num = 1;
    with open("中國網站排名.txt", "a", encoding='utf-8') as f:
        f.write("排名    網站 \n")
        for i in result_text:
            f.writelines(str(num) + "      " + str(i) + "\n")
            num += 1


if __name__ == '__main__':
    result = []
    crawl_each_url()
    write_to_file(result)

爬取內容如下 :
在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章