1. 程式人生 > >python爬取足球比賽賽程筆記

python爬取足球比賽賽程筆記

decode range 目標 err 函數 find ade col 表示

目標:爬取某網站比賽賽程,動態網頁,則需找到對應ajax請求(具體可參考:https://blog.csdn.net/you_are_my_dream/article/details/53399949)

# -*- coding:utf-8 -*-
import sys
import re
import urllib.request

link = "https://***"
r = urllib.request.Request(link)
r.add_header(‘User-Agent‘,‘Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/59.0.3071.115 Safari/537.36‘)
html = urllib.request.urlopen(r,timeout=500).read()
html = bytes.decode(html,encoding="gbk")

#返回大量json,需提取 #找出返回json中對應正則匹配的字符串 js = re.findall(‘"n":"(.*?)"‘,html) i=0 #循環打印比賽信息 try: while(1):
#將字符串Unicode轉化為中文,並輸出
print (js[i].encode(‘utf-8‘).decode(‘unicode_escape‘),js[i+1].encode(‘utf-8‘).decode(‘unicode_escape‘),"VS",js[i+2].encode(‘utf-8‘).decode(‘unicode_escape‘)) i=i+3

#當所有賽程爬取結束時,會報錯“IndexError:list index out of range”,所以進行異常處理 except IndexError: print ("finished")

總結註意點:

1、python 3 采用這個import urllib.request

因為urllib和urllib2合體了。

2、字符串Unicode轉為中文需註意python3與python2的表示方法不同:

  python3:print 字符串.encode(‘utf-8‘).decode(‘unicode_escape‘)

  python2:print 字符串.decode(‘unicode_escape‘)

3、re.findall()

關於這個函數,他的輸出內容規律可以參考我之前寫的:http://www.cnblogs.com/4wheel/p/8497121.html

"n":"(.*?)"    這個表達式只輸出(.*?)這部分(為什麽,還是參考我之前寫的那篇文章),加上問號就是非貪婪模式,不加就是貪婪模式
順便實踐解釋下貪婪模式
example:

技術分享圖片

總結:非貪婪模式就是在滿足正則表達式的情況下,盡可能少的匹配。

   相反,貪婪模式就是在滿足正則表達式的情況下,盡可能多的匹配。

python爬取足球比賽賽程筆記