(迁移)python + php 获取操作阿里华为微博等网站数据

爬虫原理

一. 普通网站php就可以实现爬虫
1. 首先获取网站的cookie
	/**
	 * 模拟登录
	 * string $url 提交链接
	 * string $cookies 设置cookie信息保存在指定的文件夹中
	 * string $post 参数
	 * 过CURL模拟登录并获取数据一些网站需要权限认证,必须登录网站后,才能有效地抓取网页并采集内容,这就需要curl来设置cookie完成模拟登录网页
	 */
	function login_post_cookie($url, $cookie, $post){
	    $ch = curl_init(); //初始化curl模块
	    curl_setopt($ch, CURLOPT_URL, $url); //登录提交的地址
	    curl_setopt($ch, CURLOPT_HEADER, 0); //是否显示头信息
	    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); //是否自动显示返回的信息
	    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1); //跟踪重定向页面
	    curl_setopt($ch, CURLOPT_COOKIEJAR, $cookie); //设置cookie信息保存在指定的文件夹中
	    curl_setopt($ch, CURLOPT_COOKIEFILE, $cookie); //发送
	
		 curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);    //SSL 报错时使用
		 curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);    //SSL 报错时使用
	
	    curl_setopt($ch, CURLOPT_POST, 1); //以POST方式提交
	    curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($post));//要执行的信息
	    $rs = curl_exec($ch); //执行CURL
	
	    // if(curl_errno($ch)){
	    //     echo 'Curl error: '.curl_error($ch);exit(); //这里是设置个错误信息的反馈
	    // }
	
	    curl_close($ch); //关闭会话
	
	    return $rs; //返回字符串
	}
2.通过使用cookie来操作获取网站数据
		/**
		 * 提交get表单功能
		 * string $url 提交链接
		 * string $cookies cookies
		 */
		function submit_get_content($url='', $cookies=''){
		    $ch = curl_init(); //初始化curl模块
		    curl_setopt($ch, CURLOPT_URL, $url); //登录提交的地址
		    curl_setopt($ch, CURLOPT_HEADER, 0); //是否显示头信息
		    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); //是否自动显示返回的信息
		
		    // curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1); //跟踪重定向页面
		
		    curl_setopt($ch, CURLOPT_COOKIE, $cookies);
		
		    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);    //SSL 报错时使用
		    curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);    //SSL 报错时使用
		
		    $rs = curl_exec($ch); //执行curl转去页面内容
		    curl_close($ch);
		    return $rs; //返回字符串
		}
二. 有验证码,滑动解锁等网站的爬虫(如阿里华为微博等网站)
1. 根据网址 https://editor.csdn.net/md/?articleId=104513689 安装python环境

通过python+selenium+chrome 模拟操作登录,

		# coding:utf-8
		from selenium import webdriver
		
		# 鼠标行为
		from selenium.webdriver.common.action_chains import ActionChains
		# 加载PHANTOMJS
		from selenium.webdriver.common.desired_capabilities import DesiredCapabilities
		
		# 时间 json
		import time,json
		# 正则
		import re
		import requests as curl
		
		# Chrome
		# 进入浏览器设置
		options = webdriver.ChromeOptions()
		# 设置中文
		options.add_argument('lang=zh_CN.UTF-8')
		# 更换头部
		# options.add_argument('--headless')
		# options.add_argument('--disable-gpu')
		options.add_argument('user-agent="Mozilla/5.0 (iPod; U; CPU iPhone OS 2_1 like Mac OS X; ja-jp) AppleWebKit/525.18.1 (KHTML, like Gecko) Version/3.1.1 Mobile/5F137 Safari/525.20"')
		driver = webdriver.Chrome(chrome_options=options)
		
		# 调整最大窗口,否则某些元素无法显示
		driver.maximize_window()

		driver.get("//想要爬取的网站的登录页")
		
		# 等待滑动模块和其他JS文件加载完毕!
		time.sleep(3)
		
		#这一块写对应网站的登录逻辑,不同网站的登录逻辑不同,请自行编辑 start
		#这一块写对应网站的登录逻辑,不同网站的登录逻辑不同,请自行编辑 end
		
		driver.find_element_by_class_name("fm-submit").click()
		time.sleep(5)
		
		# 我的客户 页面 cookies
		driver.get("//想要爬取的网站的页面")
		time.sleep(5)
		
		# 存取cookies
		cookies_content = driver.get_cookies()
		with open("cookies.txt", "w") as fp:
		    json.dump(cookies_content, fp)
		
		# 退出浏览器,如果浏览器打开多个窗口,可以使用driver.close()关闭当前窗口而不是关闭浏览器
		driver.quit()
		
		
		# 读文件
		def readFile(filename):
		    try:
		        fp = open(filename, 'r');
		        fBody = fp.read()
		        fp.close()
		        return fBody
		    except:
		        return False
		
		import json
		cookie= readFile('cookies.txt')
		if not cookie :
		    str = {'code': 0, 'msg': '获取cookies失败'}
		else:
		    str = {
		        'code': 1,
		        'msg':'获取成功',
		        'cookie':cookie,
		        'key':'nish',
		    }
		
		# 发送给自己的机器存起来
		url = "http://www.onlyni.com/api.php/api/upload_cookie"
		
		res = curl.post(url,data=str)
		print(res.text)
2.再通过使用cookie来操作获取网站数据就可以实现
注意事项

1.很多网站会在请求header中添加token等字段,会对这些字段做判断。
这些就需要先获取到这些token,再把token放入header中获取
2.cookie需要一直获取,正常一个小时以后就会失效

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值