Python爬虫入门2
一、Requests获取豆瓣电影信息
1. 分析
- 请求URL
- https://movie.douban.com/top250 - 请求方式
- GET - 请求头
- User-Agent
- Cookies - 分页链接变化
- 第二页:https://movie.douban.com/top250?start=25&filter=
- 第三页:https://movie.douban.com/top250?start=50&filter=
- 猜测第一页:https://movie.douban.com/top250?start=0&filter=
- 结论:分页变化在start=
后的参数
2. 实现
- 需要的信息
- 电影名称、链接
- 导演、主演
- 年份、类型
- 评分、评论
- 简介、排名 - 代码
import re
import requests
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 '
'(KHTML, like Gecko) Chrome/75.0.3770.100 Safari/537.36',
}
# 爬虫三部曲
# 1.发送请求
def get_page(urls):
response = requests.get(urls, headers=headers)
return response
# 2.解析数据
def parse_index(html):
res_str = '<div class="item">.*?<em class="">(.*?)</em>.*?<a href="(.*?)">.*?' \
'<span class="title">(.*?)</span>.*?导演:(.*?)主演:(.*?)<br>(.*?)</p>.*?' \
'<span class="rating_num".*?>(.*?)</span>.*?<span>(.*?)人评价</span>.*?' \
'<span class="inq">(.*?)</span>'
index_res = re.findall(res_str, html, re.S)
return index_res
# 3.保存数据
if __name__ == '__main__':
num = 0
for i in range(1):
url = f'https://movie.douban.com/top250?start={num}&filter='
num += 25
print(url)
page_res = get_page(url)
movie_list = parse_index(page_res.text)
for movie in movie_list:
top, m_url, m_name, director, actor, year_type, point, commit, desc = movie
director = director.replace(' ', '').strip()
actor = actor.strip()
year_type = year_type.strip('\n').replace(' ', '').strip()
with open("top250.txt", mode='a', encoding='utf-8') as file:
file.writelines('-' * 40)
file.writelines('\n电影排名:' + top)
file.writelines('\n电影url:' + m_url)
file.writelines('\n电影名称:' + m_name)
file.writelines('\n电影导演:' + director)
file.writelines('\n电影主演:' + actor)
file.writelines('\n年份类型:' + year_type)
file.writelines('\n电影评分:' + point)
file.writelines('\n电影评论:' + commit)
file.writelines('\n电影简介:' + desc + '\n')
print('-' * 40)
print(f'''
电影排名:{top}
电影url:{m_url}
电影名称:{m_name}
电影导演:{director}
电影主演:{actor}
年份类型:{year_type}
电影评分:{point}
电影评论:{commit}
电影简介:{desc}
''')
结果
https://movie.douban.com/top250?start=0&filter=
----------------------------------------
电影排名:1
电影url:https://movie.douban.com/subject/1292052/
电影名称:肖申克的救赎
电影导演:弗兰克·德拉邦特 Frank Darabont
电影主演:蒂姆·罗宾斯 Tim Robbins /...
年份类型:1994/美国/犯罪 剧情
电影评分:9.6
电影评论:1468896
电影简介:希望让人自由。
----------------------------------------
电影排名:2
电影url:https://movie.douban.com/subject/1291546/
电影名称:霸王别姬
电影导演:陈凯歌 Kaige Chen
电影主演:张国荣 Leslie Cheung / 张丰毅 Fengyi Zha...
年份类型:1993/中国大陆 香港/剧情 爱情 同性
电影评分:9.6
电影评论:1088428
电影简介:风华绝代。
...
二、Selenium
1. 简介
- 说明
selenium最初是一个自动化测试工具,而爬虫中使用它主要是为了解决requests无法执行javascript代码的问题,原理是驱动浏览器执行一些设定好的操作。 - 优点
执行JS代码,不需要分析复杂的网站通信流程,可以对浏览器做弹窗、下拉等动作,获取动态数据,可处理登录验证 - 缺点
执行效率低 - 安装与使用
- 安装库
pip install selenium
- 谷歌浏览器
https://www.google.cn/chrome/
- 安装浏览器驱动
http://npm.taobao.org/mirrors/chromedriver/2.38/
chromedriver_win32.zip
2. 代码
from selenium import webdriver # 用来驱动浏览器的
from selenium.webdriver.common.by import By # 按照什么方式查找,By.ID,By.CSS_SELECTOR
from selenium.webdriver.common.keys import Keys # 键盘按键操作
from selenium.webdriver.support import expected_conditions as EC # 和下面WebDriverWait一起用的
from selenium.webdriver.support.wait import WebDriverWait # 等待页面加载某些元素
import time
# driver = webdriver.Chrome(r'绝对路径/chromedriver.exe')
driver = webdriver.Chrome('chromedriver.exe')
try:
driver.get('https://www.jd.com')
# 获取显式等待对象10秒
# 可以等待某个标签加载10秒
# 显示等待,等待某个元素被加载
wait = WebDriverWait(driver, 10)
# 查找元素id为key的搜索框
input_tag = wait.until(EC.presence_of_element_located((By.ID, 'key')))
# 在搜索框内输入商品名称
input_tag.send_keys('抱枕')
# 按下键盘回车键
input_tag.send_keys(Keys.ENTER)
time.sleep(10)
finally:
driver.close()