1.使用User-Agent--代表身份
直接用urllib2(python3使用代替urllib.request)给一个网站发送请求的话,确实略有些唐突了,就好比,人家每家都有门,你以一个路人的身份直接闯进去显然不是很礼貌。而且有一些站点不喜欢被程序(非人为访问)访问,有可能会拒绝你的访问请求。
但是如果我们用一个合法的身份去请求别人网站,显然人家就是欢迎的,所以我们就应该给我们的这个代码加上一个身份,就是所谓的User-Agent头。
具体参考代码:
from urllib.request import Request,urlopen
ua_header = {"User-Agent" : "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0;"}
request = Request("http://www.baidu.com",headers=ua_header)
#urlopen()函数,url是必须要传入的,data如果传入就是POST请求,如果不传就是GETT请求
response = urlopen(request)
#到服务器返回的数据,读取里面的全部内容
response_data = response.read()
#打印返回的数据
print(response_data.decode("utf-8"))
2.随机选择ip
如果代理IP足够多,就可以像随机获取User-Agent一样,随机选择一个代理去访问网站
rom urllib.request import ProxyHandler,Request,build_opener
import random
#参数是字典类型,http是key,值是ip地址
#如果没有代理的服务器也要写
proxy_list = [
{"http" : "122.72.18.35:80"},
{"http" : "122.72.18.34:80"},
{"http" : "203.174.112.13:3128"},
]
# 随机选择一个代理
proxy = random.choice(proxy_list)# 使用选择的代理构建代理处理器对象
print(proxy)
http_proxyhander = ProxyHandler(proxy)
3.模拟网站登录
from selenium import webdriver
import time
#创建一个浏览器客户端,并且指定配置
#如果是PhantomJS做浏览器客户端还要设置路径
driver = webdriver.PhantomJS(executable_path="/usr/local/bin/phantomjs")
# driver = webdriver.Chrome() 表示用谷歌浏览器
driver.get("https://www.douban.com/")
time.sleep(1)
driver.save_screenshot("豆瓣首页.png")
#输入账号
driver.find_element_by_id("form_email").send_keys("账号")
#输入密码
driver.find_element_by_name("form_password").send_keys("密码")
#保存验证码的图片
driver.save_screenshot("验证码.png")
#输入验证码
check_code = input("请输入验证码:")
print(r"验证码是多少:%s" % check_code)
driver.find_element_by_id("captcha_field").send_keys(check_code)
#点击登录按钮
driver.find_element_by_xpath("//input[@class='bn-submit']").click()
#休眠一下等待登录成功
time.sleep(3)
#保存登录成功的快照
driver.save_screenshot("登录成功.png")
#保存成功登录好的html到本地
with open("douban.html","w",encoding="utf-8") as f:
f.write(driver.page_source)
#退出成功
driver.quit()