1. 安装爬虫所需的开发包:
pip install requests 做网络请求(爬虫)
pip install bs4 数据解析(爬虫)
pip install lxml 内核解析
pip install html5lib
pip list (查看安装命令)
2.创建一个项目:
3.打开一个网站,查看并且提取出我们爬取时候所需要的信息:
找到请求的 url、请求方式、身份信息
4. 在项目中创建一个.py结尾的python文件,并且编写代码:
def get_page():
# 1. url
url = "https://movie.douban.com/"
# 2. 请求页面的时候应该发送什么数据
headers = {
"User-Agent":"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.67 Safari/537.36"
}# 伪装成浏览器的身份访问
# 3. 请求方式:post/get
# 4. 发送请求
response = requests.get(url,headers)
#print(response.text)
text = response.text
return text
这样我们就通过请求爬取到了一个网页的文本内容
5. 分析网页代码,根据标签提取所需要的内容:
通过上面的网页分析,我们只对需要的信息爬取:
import requests
from bs4 import BeautifulSoup
import json
def get_page():
# 1. url
url = "https://movie.douban.com/"
# 2. 请求页面的时候应该发送什么数据
headers = {
"User-Agent":"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.67 Safari/537.36"
}# 伪装成浏览器的身份访问
# 3. 请求方式:post/get
# 4. 发送请求
response = requests.get(url,headers)
#print(response.text)
text = response.text
return text
def pase_page(text):
# pip install lxml 安装内核解析
soup = BeautifulSoup(text,'lxml')
# pip install lxml 内核解析
# find_all 获取 li 标签中 data-release = 2018 的所有数据
liList = soup.find_all("li",attrs={"data-release":"2018"})
movies = [] # 创建列表容器
for li in liList:
# 获取li 标签中的属性
title= li['data-title']
release = li['data-release']
region = li ['data-region']
actors = li['data-actors']
print("===========================================")
# print(title)
# print(release)
# print(region)
# print(actors)
# find 寻找li标签 中的img 标签
img = li.find('img')
# 获取img标签中的属性
src = img['src']
movie = {} # 创建字典,接受对象信息
movie['title'] = title
movie['release'] = release
movie['region'] = region
movie['actors'] = actors
movie['src'] = src
movies.append(movie)# 将对象放入容器中,暂时保存
return movies
def save_data(data):
# 打开json格式储存工具
with open('douban.json','w',encoding='utf-8') as fp:
# json.dump 将字典、列表dump成满足json格式的字符串
json.dump(data,fp,ensure_ascii=False)
if __name__ == '__main__':
text = get_page() # 获取爬取的内容
movies = pase_page(text) # 对爬取的内容进行赛选
save_data(movies) # 对数据进行json格式转换储存