python爬虫,爬取猫眼电影1(正则表达式)
本文用正則、xpath、beautifulsoup、css、pyquery幾種不同的方式,爬取貓眼電影。只是記錄過程。比較亂。
貓眼電影現在也添加了一些反爬蟲機制,如果直接用requests可能會403.所以最好添加header 和cookies。
添加的方法是使用網頁的自動生成請求。
瀏覽器登陸,直接百度搜。
點擊榜單
?點擊top100
?出來頁面之后,點擊檢查按鈕,調出開發者工具。
?選擇network選項卡,然后在頁面上,點擊右鍵彈出“重新加載”,有的瀏覽器可能是“刷新”都差不多。
刷出來4這個頁面,顯示它是一個document,狀態碼是200.
選中4, 右鍵彈出copy
選擇copy as curl(bash)。這樣網絡命令就拷貝到你的剪切板里了。
在進入這個網站,把剪切板里的東西粘貼到左邊欄,就可以自動生成python請求語法。
https://curl.trillworks.com/
?右邊的代碼直接拷貝到pycharm里。就可以生成response了。這樣免去了自己寫,復制粘貼cookies。省很多事,也不會出錯。
?可以看到,粘過來,自動會帶有header, cookies
運行一下, 就可以得到response
?
可以打印出response.txt。太長了,不截屏了。
為了方便,我們還是把這個文件存到本地,方便練習解析庫。?
wk_dir = '(你的路徑)' import oswith open(os.path.join(wk_dir, 'maoyan.txt'), 'w', encoding = 'utf-8') as f:f.write(response.text)print("saved")?這樣就保存了
如果不關電腦,一直用response.txt也行。
html = response.text html?首先是正則。
選取一段代碼研究,
?電影的名字是在title后面?
如果檢查元素的話,可以發現
?在“title" 和 ”data-act"之間。
打開這個網址,試一下:
https://c.runoob.com/front-end/854/
電影名字,就是正則表達式里面,括號里的內容,也是我們想提取的信息。?
?搜索電影評分
用
class="score".*?integer">(.*?)</i這樣就可以得到需要的 信息。用python把正則表達式寫下來,就是。
這里我們首先選擇每一部電影的源代碼片段。觀察發現,源代碼片段是dd開頭的。
?
所以在每一個dd里面。搜索正則。
這樣不會亂。
for item in item_list:index = re.search(r"board-index-.*?>(\d.*?)</i", item)print(index.group(1))image = re.search(r'data-src.*?"(.*?)"', item)print(image.group(1))title = re.search(r'class="name".*?title="(.*?)"', item)print(title.group(1))actor = re.search(r'class="star">.*?(.*?)</p',item, re.S)print(actor.group(1).strip())time = re.search(r'class="releasetime">(.*?)</p>', item, re.S)print(time.group(1).strip())score1 = re.search(r'class="integer">(\d)', item)score2 = re.search(r'class="fraction">(\d)', item)score = score1.group(1) +"." +score2.group(1)print(score)?這樣就可以得到結果。
用正則表達式提取信息,就結束了。
在提取電影演員的時候,遇到一個問題,就是在線的正則表達式測試器都不太好用。最后發現了一個網址,這兩個:
https://regex101.com/
這個是國外的,比較慢,
國內的是https://tool.lu/regex/
選中單行,就可以匹配到演員信息。很多在線測試工具沒有這個功能,導致匹配不出來。
?國外的網站就是這樣的。
也要點選 single line?
這樣就能匹配到演員信息。
?
電影的縮略圖信息,也能夠匹配出來。
其他的就沒啥問題了?
總結
以上是生活随笔為你收集整理的python爬虫,爬取猫眼电影1(正则表达式)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: m2余额是什么意思
- 下一篇: python爬虫,爬取猫眼电影2(xpa