<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
Python爬蟲實戰,requests模組,Python實現動態網頁爬蟲
讓我們愉快地開始吧~
Python版本: 3.6.4
相關模組:
urllib模組;
random模組;
requests模組;
traceback模組;
以及一些Python自帶的模組。
安裝Python並新增到環境變數,pip安裝需要的相關模組即可。
那我們就開啟爬蟲的正確姿勢吧,先用解析介面的方法來寫爬蟲。
首先,找到真實請求。右鍵檢查,點選Network,選中XHR,重新整理網頁,選擇Name列表中的jsp檔案。沒錯,就這麼簡單,真實請求就藏在裡面。
我們再仔細看看這個jsp,這簡直是個寶啊。有真實請求url,有請求方法post,有Headers,還有Form Data,而From Data表示給url傳遞的引數,通過改變引數,咱們就可以獲得資料!為了安全,給自個Cookie打了個馬賽克
我們嘗試點選翻頁,發現只有pagesnum引數會變化。
1 from urllib.parse import urlencode 2 import csv 3 import random 4 import requests 5 import traceback 6 from time import sleep 7 from lxml import etree #lxml為第三方網頁解析庫,強大且速度快
1 base_url = 'http://www.hshfy.sh.cn/shfy/gweb2017/ktgg_search_content.jsp?' #這裡要換成對應Ajax請求中的連結 2 3 headers = { 4 'Connection': 'keep-alive', 5 'Accept': '*/*', 6 'X-Requested-With': 'XMLHttpRequest', 7 'User-Agent': '你的User-Agent', 8 'Origin': 'http://www.hshfy.sh.cn', 9 'Referer': 'http://www.hshfy.sh.cn/shfy/gweb2017/ktgg_search.jsp?zd=splc', 10 'Accept-Language': 'zh-CN,zh;q=0.9', 11 'Content-Type': 'application/x-www-form-urlencoded', 12 'Cookie': '你的Cookie' 13 }
構建get_page函數,自變數為page,也就是頁數。以字典型別建立表單data,用post方式去請求網頁資料。這裡要注意要對返回的資料解碼,編碼為’gbk’,否則返回的資料會亂碼!
1def get_page(page): 2 n = 3 3 while True: 4 try: 5 sleep(random.uniform(1, 2)) # 隨機出現1-2之間的數,包含小數 6 data = { 7 'yzm': 'yxAH', 8 'ft':'', 9 'ktrqks': '2020-05-22', 10 'ktrqjs': '2020-06-22', 11 'spc':'', 12 'yg':'', 13 'bg':'', 14 'ah':'', 15 'pagesnum': page 16 } 17 url = base_url + urlencode(data) 18 print(url) 19 try: 20 response = requests.request("POST",url, headers = headers) 21 #print(response) 22 if response.status_code == 200: 23 re = response.content.decode('gbk') 24 # print(re) 25 return re # 解析內容 26 except requests.ConnectionError as e: 27 print('Error', e.args) # 輸出異常資訊 28 except (TimeoutError, Exception): 29 n -= 1 30 if n == 0: 31 print('請求3次均失敗,放棄此url請求,檢查請求條件') 32 return 33 else: 34 print('請求失敗,重新請求') 35 continue
構建parse_page函數,對返回的網頁資料進行解析,用Xpath提取所有欄位內容,儲存為csv格式。
1def parse_page(html): 2 try: 3 parse = etree.HTML(html) # 解析網頁 4 items = parse.xpath('//*[@id="report"]/tbody/tr') 5 for item in items[1:]: 6 item = { 7 'a': ''.join(item.xpath('./td[1]/font/text()')).strip(), 8 'b': ''.join(item.xpath('./td[2]/font/text()')).strip(), 9 'c': ''.join(item.xpath('./td[3]/text()')).strip(), 10 'd': ''.join(item.xpath('./td[4]/text()')).strip(), 11 'e': ''.join(item.xpath('./td[5]/text()')).strip(), 12 'f': ''.join(item.xpath('./td[6]/div/text()')).strip(), 13 'g': ''.join(item.xpath('./td[7]/div/text()')).strip(), 14 'h': ''.join(item.xpath('./td[8]/text()')).strip(), 15 'i': ''.join(item.xpath('./td[9]/text()')).strip() 16 } 17 #print(item) 18 try: 19 with open('./law.csv', 'a', encoding='utf_8_sig', newline='') as fp: 20 # 'a'為追加模式(新增) 21 # utf_8_sig格式匯出csv不亂碼 22 fieldnames = ['a', 'b', 'c', 'd', 'e','f','g','h','i'] 23 writer = csv.DictWriter(fp,fieldnames) 24 writer.writerow(item) 25 except Exception: 26 print(traceback.print_exc()) #代替print e 來輸出詳細的異常資訊 27 except Exception: 28 print(traceback.print_exc())
遍歷一下頁數,呼叫一下函數
1 for page in range(1,5): #這裡設定想要爬取的頁數 2 html = get_page(page) 3 #print(html) 4 print("第" + str(page) + "頁提取完成")
效果:
到此這篇關於Python用requests模組實現動態網頁爬蟲的文章就介紹到這了,更多相關Python requests內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45