python3 網路爬蟲開發實戰 貓眼top100
我發現自己沒有整理和總結的習慣,有時是學了之後覺得會了,懶得整理,有時是沒有時間,偶爾有時候想起來會寫一篇。但是後來發現忘的還是挺快的,而且想找以前的東西的時候總是不太方便。不過人生在世,總要給這個世界留下點什麼。把自己在學習中得到的東西,所思所想都記錄下來,所以在此立個flag【狗頭】,養成總結和寫作的習慣=-=。
最近在看崔慶才老師的python3網路爬蟲開發實戰爬取貓眼top100的電影資訊。總的來說,爬取的步驟分為兩步,1)使用requests模組的get方法請求網頁資訊;2)使用正規表示式將資訊匹配出來。步驟不麻煩,但是由於時間原因,http協議改為了https協議,不過也可能當時用的就是https協議,不過http請求會跳轉為https請求,不過這個影響不大。另一個是如果像文中那樣設定headers欄位的話會被貓眼的伺服器識別為爬蟲,得到的是一個美團驗證中心的頁面。
1)請求頁面
文中的headers只設定了一個User-Agent欄位,但是會被識別為爬蟲,所以最好將該請求的所有header欄位都設定,這樣貓眼也就無法識別爬蟲和瀏覽器了。cookie欄位不用設定,因為第一次請求是沒有cookie的。
2)正則提取
正則提取最重要的就是正規表示式。
<dd>.*?<a href="(.*?)" title="(.*?)".*?<p class="star">(.*?)</p>.*?<p class="releasetime">(.*?)</p>.*?</dd>
這是我一開始寫的正則式,還是很稚嫩,感覺太具體了,多了很多不必要的資訊,我提取的資訊和文中提取的資訊不同,只提取了href 、電影名、主演、上映時間。
<dd>.*?board-index.*?>(.*?)</i>.*?data-src="(.*?)".*?name.*?a.*?>(.*?)</a>
這是文中的一個正規表示式,我從中理解的正規表示式的書寫原則是先找要匹配資訊前面最近的錨點,然後再從錨點匹配到所要的資訊。
<dd>.*?href="(.*?)" title="(.*?)".*?star.*?>(.*?)<.*?releasetim.*?>(.*?)<.*?</dd>
這是根據文中的方法書寫的正規表示式
程式碼部分
import requests, re
main_url = 'https://maoyan.com/board/4'
films=[]
def getOnePage(url):
headers = {'User-Agent':"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.97 Safari/537.36",
'Accept':'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8',
'Accept-Encoding':'gzip, deflate, br',
'Accept-Language':'zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2',
'Cache-Control': 'no-cache',
'Host':'maoyan.com',
'Pragma':'no-cache',
'Connection':'keep-alive',
'Upgrade-Insecure-Requests':'1'
}
respond = requests.get(url, headers=headers)
pattern ='<dd>.*?href="(.*?)" title="(.*?)".*?star.*?>(.*?)<.*?releasetim.*?>(.*?)<.*?</dd>'
result = re.findall(pattern, respond.text, re.S)
print(result)
films.extend(result)
def main():
all_url=[]
all_url.append(main_url)
for i in range(10,100,10):
tmp = main_url+'/?offset='+str(i)
all_url.append(tmp)
for u in all_url:
getOnePage(u)
# print(films[20])
with open('maoyan.txt','w') as f:
line =''
for i in range(100):
# print(films[i])
line_list= list(films[i])
line_list[2] = line_list[2].strip()
line = ' '.join(line_list)+'\n'
f.write(line)
main()
相關文章
- 【Python3網路爬蟲開發實戰】3.4-抓取貓眼電影排行Python爬蟲
- python3網路爬蟲開發實戰_Python3 爬蟲實戰Python爬蟲
- Python網路爬蟲實踐案例:爬取貓眼電影Top100Python爬蟲
- Python3網路爬蟲開發實戰Python爬蟲
- python3網路爬蟲開發實戰_Python 3開發網路爬蟲(一)Python爬蟲
- 《Python3網路爬蟲開發實戰》教程||爬蟲教程Python爬蟲
- 【Python3網路爬蟲開發實戰】3-基本庫的使用-4抓取貓眼電影排行Python爬蟲
- 《python3網路爬蟲開發實戰》--pyspiderPython爬蟲IDE
- python3網路爬蟲開發實戰pdfPython爬蟲
- [Python3網路爬蟲開發實戰] 分散式爬蟲原理Python爬蟲分散式
- 《Python3網路爬蟲開發實戰》開源啦!Python爬蟲
- [Python3網路爬蟲開發實戰] Charles 的使用Python爬蟲
- [Python3網路爬蟲開發實戰] --Splash的使用Python爬蟲
- 《Python3 網路爬蟲開發實戰》—學習筆記Python爬蟲筆記
- Python3網路爬蟲開發實戰(第二版)Python爬蟲
- Python3網路爬蟲開發實戰——第1章 開發環境Python爬蟲開發環境
- 面前最全《崔慶才python3網路爬蟲開發實戰》Python爬蟲
- 《Python3網路爬蟲開發實戰程式碼》基本庫使用Python爬蟲
- [Python3網路爬蟲開發實戰] 2-爬蟲基礎 2-網頁基礎Python爬蟲網頁
- 讀書筆記:《Python3網路爬蟲開發實戰》——第2章:爬蟲基礎筆記Python爬蟲
- 我的爬蟲入門書 —— 《Python3網路爬蟲開發實戰(第二版)》爬蟲Python
- Python 3網路爬蟲開發實戰Python爬蟲
- 《Python3網路爬蟲開發實戰》抽獎贈書活動Python爬蟲
- python3網路爬蟲開發實戰【高清掃描帶目錄】Python爬蟲
- 【閱讀筆記】《Python3網路爬蟲開發實戰》PDF文件筆記Python爬蟲
- Python3網路爬蟲開發實戰——第3章 基本庫的使用Python爬蟲
- 網路爬蟲——爬蟲實戰(一)爬蟲
- 《網路爬蟲開發實戰案例》筆記爬蟲筆記
- [Python3網路爬蟲開發實戰] 2-爬蟲基礎 1-HTTP基本原理Python爬蟲HTTP
- Python3網路爬蟲快速入門實戰解析Python爬蟲
- python3網路爬蟲開發實戰-線上版-可複製貼上Python爬蟲
- 2019最新崔慶才python3網路爬蟲開發專案實戰(完整)Python爬蟲
- python3網路爬蟲開發實戰(配置踩坑及學習備忘)Python爬蟲
- 《Python3網路爬蟲開發實戰(第二版)》內容介紹Python爬蟲
- [Python3網路爬蟲開發實戰] 2-爬蟲基礎 5-代理的基本原理Python爬蟲
- 【Python3網路爬蟲開發實戰】4-解析庫的使用-1 使用XPathPython爬蟲
- 【Python3網路爬蟲開發實戰】4-解析庫的使用-3 使用pyqueryPython爬蟲
- 《Python3網路爬蟲開發實戰(第二版)》今天正式上市了!!!!Python爬蟲