Python爬蟲實現(xiàn)熱門電影信息采集
一、前言
好不容易女神喊我去看電影,但是她又不知道看啥,那么我當然得準備準備~

二、前期準備
1、使用的軟件
python 3.8 開源 免費的 (統(tǒng)一 3.8)
Pycharm YYDS python最好用的編輯器 不接受反駁…
2、需要用的模塊
requests >>> 數(shù)據(jù)請求模塊 pip install requests
parsel? ?>>> 數(shù)據(jù)解析模塊 pip install parsel
csv
3、模塊安裝問題
模塊安裝問題:
1)、如何安裝python第三方模塊:
第一種:win + R 輸入 cmd 點擊確定, 輸入安裝命令 pip install 模塊名 (pip install requests) 回車。
第二種:在pycharm中點擊Terminal(終端) 輸入安裝命令
2)安裝失敗原因:
第一種: pip 不是內部命令
解決方法: 設置環(huán)境變量
第二種: 出現(xiàn)大量報紅 (read time out)
解決方法: 因為是網(wǎng)絡鏈接超時, 需要切換鏡像源。
清華:https://pypi.tuna.tsinghua.edu.cn/simple 阿里云:http://mirrors.aliyun.com/pypi/simple/ 中國科技大學 https://pypi.mirrors.ustc.edu.cn/simple/ 華中理工大學:http://pypi.hustunique.com/ 山東理工大學:http://pypi.sdutlinux.org/ 豆瓣:http://pypi.douban.com/simple/ 例如:pip3 install -i https://pypi.doubanio.com/simple/ 模塊名
第三種: cmd里面顯示已經(jīng)安裝過了, 或者安裝成功了, 但是在pycharm里面還是無法導入。
解決方法: 可能安裝了多個python版本 (anaconda 或者 python 安裝一個即可) 卸載一個就好,或者你pycharm里面python解釋器沒有設置好。
4、如何配置pycharm里面的python解釋器?
如何配置pycharm里面的python解釋器?
- 選擇file(文件) >>> setting(設置) >>> Project(項目) >>> python interpreter(python解釋器)
- 點擊齒輪, 選擇add
- 添加python安裝路徑
5、pycharm如何安裝插件?
- 選擇file(文件) >>> setting(設置) >>> Plugins(插件);
- 點擊 Marketplace 輸入想要安裝的插件名字 比如:翻譯插件 輸入 translation;
- 選擇相應的插件點擊 install(安裝) 即可;
- 安裝成功之后 是會彈出 重啟pycharm的選項 點擊確定, 重啟即可生效;
三、思路
爬蟲獲取數(shù)據(jù)是要分析服務器返回的數(shù)據(jù)內容,無論你爬取任何網(wǎng)站數(shù)據(jù),都是可以按照這個幾步驟來。
1、明確需求
我們要爬取的內容是什么 https://movie.douban.com/top250,要分析我們的想要數(shù)據(jù), 可以從哪里獲取/哪里來的… (數(shù)據(jù)來源分析)
用開發(fā)者工具進行抓包(數(shù)據(jù)包)分析,靜態(tài)網(wǎng)頁/網(wǎng)頁上面看到的數(shù)據(jù)內容,在網(wǎng)頁源代碼里面都有。
2、發(fā)送請求
開發(fā)者工具里面headers ,對于那個網(wǎng)址發(fā)送請求,發(fā)送什么樣的請求,攜帶那些請求頭參數(shù)。
3、獲取數(shù)據(jù)
獲取服務器返回的數(shù)據(jù)內容,看服務器數(shù)據(jù)格式是什么樣的,或者說我們想要的數(shù)據(jù)是什么樣的;
獲取文本數(shù)據(jù) response.text
獲取服務器json字典數(shù)據(jù) response.json()
獲取二進制數(shù)據(jù) response.content
保存視頻/音頻/圖片/特定格式的文件內容, 都是獲取二進制數(shù)據(jù);
4、解析數(shù)據(jù)
提供我們想要的數(shù)據(jù)內容
5、保存數(shù)據(jù)
保存本地
四、代碼部分?
import requests # 數(shù)據(jù)請求模塊 pip install requests
import parsel # 數(shù)據(jù)解析模塊 pip install parsel
import csv # 保存表格數(shù)據(jù)
f = open('豆瓣數(shù)據(jù).csv', mode='a', encoding='utf-8', newline='')
# 快速批量替換 全選內容 使用正則表達式 替換內容
csv_writer = csv.DictWriter(f, fieldnames=[
'電影名字',
'導演',
'主演',
'年份',
'國家',
'電影類型',
'評論人數(shù)',
'評分',
'概述',
'詳情頁',
])
csv_writer.writeheader()
for page in range(0, 250, 25):
url = f'https://movie.douban.com/top250?start={page}&filter='
# headers 請求頭 用來偽裝python代碼 為了防止爬蟲程序被服務器識別出來,
# User-Agent 瀏覽器的基本標識 用戶代理 直接復制粘貼的
#Python學習交流群872937351 ,免費領取視頻/電子書/解答等等
# 披著羊皮的狼 爬蟲程序 >>> 狼 headers >>> 羊皮 服務器數(shù)據(jù) >>> 羊圈
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.45 Safari/537.36'
}
# 發(fā)送請求 get
# 通過requests數(shù)據(jù)請求模塊里面get請求方法 對于 url以及發(fā)送請求并且攜帶header請求頭, 最后用response變量接收返回數(shù)據(jù)
response = requests.get(url=url, headers=headers)
# 獲取數(shù)據(jù)
# print(response.text)
# 解析數(shù)據(jù) re正則表達式 css選擇器 xpath 那一種更方便 更加舒服 就用哪一個
# json 鍵值對取值
# 提取我們想要的數(shù)據(jù)內容
# 把獲取下來的 response.text 網(wǎng)頁字符串數(shù)據(jù) 轉成selector 對象
selector = parsel.Selector(response.text)
# <Selector xpath=None data='<html lang="zh-CN" class="ua-windows ...'> 對象 # css選擇器 根據(jù)標簽屬性提取數(shù)據(jù)
# 第一次解析數(shù)據(jù), 獲取所有l(wèi)i標簽
lis = selector.css('.grid_view li') # css選擇器語法
# selector.xpath('//*[@class="grid_view"]/li') # xpath寫法
# [] 列表, 如果說我想要一一提取列表里面的元素 怎么做?
for li in lis:
try:
# span:nth-child(1) 組合選擇器 表示的選擇第幾個span標簽
# 1 選擇第一個span標簽 text 獲取標簽文本數(shù)據(jù)
title = li.css('.hd a span:nth-child(1)::text').get()
href = li.css('.hd a::attr(href)').get() # 詳情頁
# li.xpath('//*[@class="hd"]/a/span(1)/text()').get()
# get返回字符串數(shù)據(jù) getall 是返回列表數(shù)據(jù)
# get獲取第一個標簽數(shù)據(jù) getall 獲取所有的
move_info = li.css('.bd p::text').getall()
actor_list = move_info[0].strip().split(' ') # 列表索引位置取值
# print(actor_list)
date_list = move_info[1].strip().split('/') # 列表索引位置取值
director = actor_list[0].replace('導演: ', '').strip() # 導演
actor = actor_list[1].replace('主演: ', '').replace('/', '').replace('...', '') # 演員
date = date_list[0].strip() # 年份
country = date_list[1].strip() # 國家
move_type = date_list[2].strip() # 電影類型
comment = li.css('.star span:nth-child(4)::text').get().replace('人評價', '') # 評論人數(shù)
star = li.css('.star span:nth-child(2)::text').get() # 星級
world = li.css('.inq::text').get() # 概述
# 字符串的高級方法
# replace() 字符串替換的方法 strip() 去除字符串左右兩端的空格 split() 分割 之后返回的列表
# 字符串如何去除空格呢?
# print(title, actor_list, date_list)
dit = {
'電影名字': title,
'導演': director,
'主演': actor,
'年份': date,
'國家': country,
'電影類型': move_type,
'評論人數(shù)': comment,
'評分': star,
'概述': world,
'詳情頁': href,
}
csv_writer.writerow(dit)
print(title, director, actor, date, country, move_type, comment, star, world, href, sep=' | ')
except:
pass
到此這篇關于Python爬蟲實現(xiàn)熱門電影信息采集的文章就介紹到這了,更多相關Python爬蟲采集信息內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
python使用multiprocessing模塊實現(xiàn)帶回調函數(shù)的異步調用方法
這篇文章主要介紹了python使用multiprocessing模塊實現(xiàn)帶回調函數(shù)的異步調用方法,實例分析了multiprocessing模塊異步調用的相關使用技巧,需要的朋友可以參考下2015-04-04
python?argparse的使用步驟(全網(wǎng)最全)
argparse是python的一個命令行參數(shù)解析包,在代碼需要頻繁修改參數(shù)時,方便使用,主要用法就是在命令行輸入自己想要修改的參數(shù),這篇文章主要介紹了python?argparse的使用步驟(全網(wǎng)最全),需要的朋友可以參考下2023-04-04
python 實現(xiàn)查找文件并輸出滿足某一條件的數(shù)據(jù)項方法
今天小編就為大家分享一篇python 實現(xiàn)查找文件并輸出滿足某一條件的數(shù)據(jù)項方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2019-06-06
windowns使用PySpark環(huán)境配置和基本操作
pyspark是Spark對Python的api接口,可以在Python環(huán)境中通過調用pyspark模塊來操作spark,這篇文章主要介紹了windowns使用PySpark環(huán)境配置和基本操作,感興趣的可以了解一下2021-05-05
Python并行庫joblib之delayed函數(shù)與Parallel函數(shù)詳解
這篇文章主要介紹了Python并行庫joblib之delayed函數(shù)與Parallel函數(shù)詳解,Joblib就是一個可以簡單地將Python代碼轉換為并行計算模式的軟件包,它可非常簡單并行我們的程序,從而提高計算速度,需要的朋友可以參考下2023-08-08

