用requests.get()之后得到的源代码跟浏览器里面的不一样
崔庆才的《python3网络爬虫开发实战》在2.3.3节:
我们用urllib或requests获取到的是HTML源代码,但是这个网页是用js渲染的,上面两个库不会像浏览器那样继续运行后面请求来的js模块,所以不一样。
==================
Selenium是一个用于测试网站的自动化测试工具,支持各种浏览器包括Chrome、Firefox、Safari等主流界面浏览器,同时也支持phantomJS无界面浏览器。
安装 Selenium
pip install Selenium
安装浏览器驱动
Selenium3.x调用浏览器必须有一个webdriver驱动文件
- Chrome驱动文件下载: 点击下载chromedrive
- Firefox驱动文件下载: 点解下载geckodriver
D:\software\geckodriver-v0.30.0-win64\
配置环境变量
设置浏览器的地址非常简单。 我们可以手动创建一个存放浏览器驱动的目录,如: F:\GeckoDriver , 将下载的浏览器驱动文件(例如:chromedriver、geckodriver)丢到该目录下。
我的电脑–>属性–>系统设置–>高级–>环境变量–>系统变量–>Path,将“F:\GeckoDriver”目录添加到Path的值中。比如:Path字段;F:\GeckoDriver
示例,点击百度中的新闻
# -*- coding:UTF-8 -*-
from selenium import webdriver
from time import sleep
#1.创建Chrome浏览器对象,这会在电脑上在打开一个浏览器窗口
browser = webdriver.Firefox(executable_path ="D:\software\geckodriver-v0.30.0-win64\geckodriver.exe")
#2.通过浏览器向服务器发送URL请求
browser.get("https://www.baidu.com/")
sleep(3)
#3.刷新浏览器
browser.refresh()
#4.设置浏览器的大小
browser.set_window_size(1400,800)
#5.设置链接内容
element=browser.find_element_by_link_text("新闻")
element.click()
出现错误:
selenium.common.exceptions.WebDriverException: Message: 'geckodriver-v0.30.0-win64' executable may have wrong permissions.
解决方法:
把
browser = webdriver.Firefox(executable_path ="D:\software\geckodriver-v0.30.0-win64\")
修改为:
executable_path ="D:\software\geckodriver-v0.30.0-win64\geckodriver.exe")
下面示例失败:
from selenium import webdriver
import time
browser = webdriver.Firefox(executable_path ="D:\software\geckodriver-v0.30.0-win64\geckodriver.exe")
get_html = "test.html"
# 打开文件,准备写入
f = open(get_html, 'wb')
url = 'https://www.baidu.com/' # 这里填你要保存的网页的网址
browser.get(url)
time.sleep(2) # 保证浏览器响应成功后再进行下一步操作
# 写入文件
f.write(browser.page_source.encode("gbk", "ignore")) # 忽略非法字符
print('写入成功')
# 关闭文件
f.close()
示例,把百度的首页保存,保存html (成功)
from selenium import webdriver
import time
browser = webdriver.Firefox(executable_path ="D:\software\geckodriver-v0.30.0-win64\geckodriver.exe")
get_html = "test2.html"
# 打开文件,准备写入
f = open(get_html, "w", encoding='utf-8')
url = 'https://www.baidu.com/' # 这里填你要保存的网页的网址
browser.get(url)
time.sleep(2) # 保证浏览器响应成功后再进行下一步操作
# 写入文件
f.write(browser.page_source) # 忽略非法字符
print('写入成功')
# 关闭文件
f.close()