phantomjs是一种无界面浏览器,以下是使用
# phantomjs是一种浏览器,没有用户界面
from selenium import webdriver
from time import sleep
# 创建有一个Phantomjs的驱动对象
driver = webdriver.PhantomJS()
url = "https://www.baidu.com/"
# 用driver发起一个get请求
driver.get(url)
sleep(5)
#selenium的page_source方法可以直接返回页面源码
html = driver.page_source
print(html)
driver.quit() # 使用结束后退出浏览器
webdriver.Chrome 使用各类有界面浏览器
from selenium import webdriver
from time import sleep
from bs4 import BeautifulSoup
# 创建浏览器驱动对象
driver = webdriver.Chrome()
url = "https://category.vip.com/suggest.php?keyword=%E5%8F%A3%E7%BA%A2"
driver.get(url)
sleep(5)
html = driver.page_source
driver.quit()
# 解析
soup = BeautifulSoup(html,"lxml")
img_list = soup.select(".J_img")
print(img_list)
#写入当前路径本地文件
# with open("vip.html","w",encoding="utf-8") as fp:
# fp.write(html)
页面进度条滚动,比如今日头条主页
from selenium import webdriver
from time import sleep
url = "https://www.toutiao.com/"
driver = webdriver.Chrome()
driver.get(url) #打开url
sleep(5)
#让页面滚动
#上拉效果通过js代码实现上拉
js = "document.body.scrollTop=1000"
driver.execute_script(js) #执行js代码
request框架 get和post请求
#requests框架基于urllib的第三方的请求框架,它对urllib进行封装,与功能的扩展,几乎涵盖了所有的web请求
import requests
#用requests发起一个get请求
r = requests.get("http://www.baidu.com/")
#打印出来的是响应体
print(r) #
#text代表响应体的字符串格式
# print(r.text)
#content是响应体的二进制格式
# print(r.content)
#加请求头
headers = {'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.106 Safari/537.36'}
url = "https://www.baidu.com/s"
data = {
'wd': '日本校花'
}
#get请求
res= requests.get(url=url,headers=headers, params=data)
#post请求
#res= requests.get(url=url,headers=headers, params=data)
# request.get返回的是一个响应对象,包含了响应头和响应体
print(res.url)
print(res.status_code)
print(res.headers)
print(res.text)
#【注意】request只是对urllib封装,不能解析js
登陆(但requests无法直接保存会话信息)
import requests
url = "http://www.jokeji.cn/user/c.asp"
# 请求头
headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.99 Safari/537.36'}
# 请求体
params = {
'u': 'bobo666',
'p': 'a12345678',
'sn': '1',
't': 'big'
}
# 登录
r = requests.get(url=url,headers=headers,params=params)
print(r.text)
# 登录成功了接下来访问主页
usr_url = "http://www.jokeji.cn/User/MemberJoke.asp"
res = requests.get(usr_url)
with open("bobo.html",'wb') as fp:
fp.write(res.content)
# 【说明】由于登录以后没有保存(requests无法直接保存会话信息),访问的主页就不是用户页面
带session的登陆
import requests
url = "http://www.jokeji.cn/user/c.asp"
# 请求头
headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.99 Safari/537.36'}
# 请求体
params = {
'u': 'bobo666',
'p': 'a12345678',
'sn': '1',
't': 'big'
}
# 如果登录需要保存登录以后用户的会话信息
s = requests.Session() # 创建一个Session对象,这个对象在请求的时候可以携带会话信息
# 用Session对象来发起请求
r = s.get(url=url,headers=headers,params=params)
print(r.text)
# s在发起请求以后携带上相关的Session信息
# 登录成功以后访问用户主页
usr_url = "http://www.jokeji.cn/User/MemberJoke.asp"
if r.text == 'true':
print("登录成功!")
res = s.get(usr_url,headers=headers)
with open("joke.html",'wb') as fp:
fp.write(res.content)
登陆古诗文网,有验证码,现阶段使用人工验证
import requests
from bs4 import BeautifulSoup
s = requests.Session()
#1、向登陆页面发起get请求,获取token和验证码
login_page = "https://so.gushiwen.org/user/login.aspx?from=http://so.gushiwen.org/user/collect.aspx"
headers = {'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.106 Safari/537.36'}
#发起get请求
logins_page = s.get(url=login_page, headers=headers)
soup = BeautifulSoup(logins_page.text, 'lxml')
#获取两个token值
token_1 = soup.select("#__VIEWSTATE")[0].attrs.get("value")
token_2 = soup.select("#__VIEWSTATEGENERATOR")[0].attrs.get("value")
#获取验证码图片的url
c = "https://so.gushiwen.org" + soup.select("#imgCode")[0].get("src")
print(c)
#下载图片
code_img = s.get(c)
print(code_img.content)
#保存到本地
with open("./code_img.png", "wb") as fp:
fp.write(code_img.content)
#技术有限,只能人工识别,然后输入验证码
code_num = input("请输入验证码:")
#请求的请求体数据已经完全获取到
# 接下来创建请求体
data = {
'__VIEWSTATE': token_1,
'__VIEWSTATEGENERATOR': token_2,
'from': 'http://so.gushiwen.org/user/collect.aspx',
'email': '[email protected]',
'pwd': '393305',
'code': code_num,
'denglu': '登录',
}
# 2、登录
login_url = "https://so.gushiwen.org/user/login.aspx?from=http%3a%2f%2fso.gushiwen.org%2fuser%2fcollect.aspx"
res = s.post(url=login_url,headers=headers, data=data)
# 3、抓取主页中的内容:所有的古诗、名句、古籍,作者全部抓取下来,写入json数据
with open("gushiwen_login.html", "w", encoding="utf-8") as fp:
fp.write(res.text)
登陆chinaunix素材网,有隐藏token
import requests
from bs4 import BeautifulSoup
#要求登陆 http://bbs.chinaunix.net/
#创建一个session对象,用于保存会话信息
s = requests.Session()
#请求头
headers = {'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.106 Safari/537.36'}
#反爬:通过隐藏域设置token
#动态生成的一些get参数
#1、对登陆页面发起get请求获取相关的动态参数和token
login_page = "http://bbs.chinaunix.net/member.php?mod=logging&action=login&logsubmit=yes"
login_source = s.get(url=login_page, headers=headers)
#创建soup对象 bs4把动态参数和token获取过来
soup = BeautifulSoup(login_source.text, "lxml")
#获取动态参数
login_params = soup.select("form.cl")[0].attrs.get("action")
#获取token
formhash = soup.select("[name=formhash]")[0].attrs.get("value")
#获取token
referer = soup.select("[name=referer]")[0].attrs.get("value")
#构造请求体
data = {
'formhash': formhash,
'referer': referer,
'username': "MrFan666",
'password': "f12345678",
'loginsubmit': 'true',
'return_type': ''
}
#登陆url, 拼接上动态的参数
login_url = "http://bbs.chinaunix.net/" + login_params
#发起post请求
res = s.post(url=login_url, headers=headers, data=data)
#写入本地
with open("chinaunix_login.html", "w") as fp:
fp.write(res.text)