关于反爬虫,我用实际案例告诉你(三大方法)

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
#参数是字典类型,httpkey,值是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()






你可能感兴趣的:(spider)