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)
爬取內容如下 :