标签: python 爬虫
这里我们用模拟中国亚马逊登录例子
1. python 安装
首先我们需要安装python3
环境,下载地址 https://www.python.org/downloads/,选择适合自己系统的python3版本。
下载之后,傻瓜式安装,安装步骤中应该是有一个把python加入到环境变量中,如果没有则手动添加(记得把pip放到环境变量中)。
完成之后,打开你的命令行,通过下面命令查看是否安装成功。
python -V
pip -V
2. 第三方库安装
pip install -i https://pypi.douban.com/simple requests selenium beautifulsoup4 lxml
requests
: Requests 唯一的一个非转基因的 Python HTTP 库,人类可以安全享用selenium
: Selenium测试直接运行在浏览器中,就像真正的用户在操作一样beautifulsoup4
: Beautiful Soup 是一个可以从HTML或XML文件中提取数据的Python库lxml
: Python 标准库中自带了 xml 模块,但是性能不够好,而且缺乏一些人性化的 API,相比之下,第三方库 lxml 是用 Cython 实现的,而且增加了很多实用的功能,可谓爬虫处理网页数据的一件利器。
3. 浏览器驱动
浏览器 | 驱动 |
---|---|
chrome | chromedriver |
firefox | geckodriver |
注意一个驱动和浏览器的对应关系
网上找比较麻烦,还不一定是最新版。
我建议大家装一个 nodejs
, 用node的包管理工具npm
来安装驱动。
安装nodejs
: http://nodejs.cn/download/,保证nodejs
和npm
在环境变量当中。
使用下面命令检查安装是否成功。
node -v
npm -v
因为npm
源在国外,我们把它更换成淘宝源。
npm install -g cnpm --registry=https://registry.npm.taobao.org
接下来我们使用cnpm来安装我们的驱动。
cnpm install -g chromedriver geckodriver
-g
是指让这两个包全局安装,相当于加到环境变量当中。
4.模拟登陆实战
# _*_ coding: utf-8 _*_
__author__ = 'lemon'
__date__ = '2018/3/20 17:51'
import time
import requests
from bs4 import BeautifulSoup
from selenium import webdriver
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC
def login(account, password):
# 因为亚马逊的登录页面需要在主页中获取
login_url = get_login_url()
options = webdriver.ChromeOptions() # 开启chrome设置
prefs = {"profile.managed_default_content_settings.images": 2}
options.add_experimental_option("prefs", prefs) # 设置无图模式
# options.add_argument("--headless") # 设置无头浏览器
options.add_argument("--disable-gpu")
driver = webdriver.Chrome(chrome_options=options) # 实例化driver
wait = WebDriverWait(driver, 10) # 智能等待
driver.get(login_url)
account_input = wait.until(EC.presence_of_element_located((By.ID, 'ap_email')))
password_input = wait.until(EC.presence_of_element_located((By.ID, 'ap_password')))
submit = wait.until(EC.element_to_be_clickable((By.ID, 'signInSubmit')))
account_input.send_keys(account)
password_input.send_keys(password)
submit.click()
# 等待五秒。浏览器关闭
time.sleep(5)
driver.close()
# 获取登录地址
def get_login_url():
headers = {
"Host": 'www.amazon.cn',
"User-Agent": 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3202.75 Safari/537.36'
}
# 使用requests发送get请求,获取页面的源代码
r = requests.get('https://www.amazon.cn',headers=headers).text
# 使用bs4解析页面代码
soup = BeautifulSoup(r, 'lxml')
# css选择器获取元素
url_params = soup.select('#nav-link-yourAccount')[0]['href']
login_url = 'https://www.amazon.cn' + url_params
print(login_url)
return login_url
if __name__ == '__main__':
login(你的账号, 你的密码)
关于selenium其他api,可以看 http://www.selenium.org.cn/
推荐看requests的官网,直通车 http://docs.python-requests.org/zh_CN/latest/
beautifulsoup4文档直通车 https://www.crummy.com/software/BeautifulSoup/bs4/doc/index.zh.html
网友评论