反爬的一些情况
- 数据的不是返回的网页源代码
- 请求参数后返回的参数是经过加密的
- 一个页面的请求只能找到一次
selenium自动化测试工具,驱动浏览器的功能,会等待浏览器执行js代码完毕,再获取数据
常规获取加密数据的操作
selenium的使用
1.1 安装
pip install selenium -i https://pypi.doubanio.com/simple
1.2 安装驱动
谷歌浏览器
火狐浏览器
将下载得到的文件解压放入python目录,能够运行的exe文件
运行代码
from selenium import webdriver
# 打开浏览器
# diver = webdriver.firefox
driver = webdriver.Chrome()
# 打开指定的页面
driver.get('https://www.taobao.com')
模拟了用户操作的过程
1.3、实际操作
爬取内容,此时请求已经完成,需要自定义中间件
class AreaSpiderSpider(scrapy.Spider):
name = 'area_spider'
# allowed_domains = ['ddddd']
start_urls = ['https://www.aqistudy.cn/historydata/daydata.php?city=%E6%88%90%E9%83%BD&month=201910']
def parse(self, response):
# 请求已经完成
print(response.text)
自定义中间件
运行程序,得到网页源代码
1.4、无头浏览器
selenium很慢是因为会打开窗口
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
# 打开浏览器
options = Options()
options.add_argument('----headless')
driver = webdriver.Chrome(chrome_options=options)
# 打开指定的页面
driver.get('https://www.taobao.com')
print(driver.page_source) # 打印网页源代码
此方法就不需要打开浏览器,能够节省内存