抓取需要登录才能访问的页面:有的网站你得登进去才能看到页面,直接访问网页地址会给你跳转到登录页面
Http协议为无连接协议
cookie存放在客户端浏览器,session存放在web服务器
import requests
from lxml import etree #用于解析html
class RenRenLogin(objects):
def __init__(self):
self.url = 'http://www.renren.com/xxxxxx/profile' #你自己登上去的人人网个人主页
self.headers = {
'Cookie':'xxxx', #你登陆后自己的cookie
'User-Agent':xxx #自己选一个User-Agent
}
#发起请求并解析
def parse_html(self):
html = requets.get(url=self.url, #请求的网页url
headers=self.headers).text #requests模块的text属性获取响应内容
p = etree.HTML(html) #创建解析对象
#xpath表达式(随便找个你想抓下来的节点内容,我们的目的是测试cookie)
xpath_bds = '/html/body/div[3]/div/div[5]/div[2]/div[1]/div/div[2]/div[4]/div[1]/div[1]/div/div/div[1]/article/section/div/form/div/dl/dd[3]/a/text()'
#解析对象调用xpath解析
r_list = p.xpath(xpath_bds)
print(r_list)
#入口函数
def run(self):
self.parse_html()
if __name__ == '__main__':
spider = RenRenLogin()
spider.run()
import requests
from lxml import etree #用于解析html
class RenRenLogin(objects):
def __init__(self):
self.url = 'http://www.renren.com/xxxxxx/profile' #你自己登上去的人人网个人主页
self.headers = {
#第一种方法这样写:'Cookie':'xxxx', #你登陆后自己的cookie
'User-Agent':xxx #自己选一个User-Agent
}
#将你拿到的cookies整理成字典形式
def get_cookies(self):
#手动登录页面后去拿你的cookies
cook_str = 'xxx' #你拿到的cookie是{xxx=xxx;xxx=xxx;...}格式
#将你拿到的cookies处理成字典
cookies = {}
#将cook_str处理成['xxx=xxx','xxx=xxx'...]
cook_lsit = cook_str.split(';')
#再处理成字典的形式{xxx:xxx,xxx:xxx/...}
for cook in cook_list:
key = cook.split('=')[0]
val = cook.split('=')[1]
#创建新的键值对
cookies[key] = val
return cookies
def parse_html(self):
#将拿到的cookies字符串处理成字典
cookies = self.get_cookies()
html = requests.get(
url=self.url,
headers=self.headers,
cookies=cookies
).text
#以下开始解析并输出,和前面的代码步骤一样,不再赘述
详细流程
import requests
class RenRenLogin:
def __init__(self):
#登录页面
self.post_url = 'http://www.renren.com/PLogin.do'
#个人主页的url地址
self.get_url = 'http://www.renren.com/xxxxxx/profile'
self.headers = {'User-Agent':'xx'}
#实例化session对象
self.session = requests.sesison()
#解析过程
def parse_html(self):
#1.先登录
#键:email和password为form标签中的 <input>标签的name
#值:为你真实的账号和密码
data = {'email':'','password':''}
#使用session对象发登录请求
self.session.post(url=self.post_url,data=data,headers=self.headers}
#2. 再抓取
html = self.session.get(url=self.get_url).text
print(html)
def run(self):
self.parse_html()
if __name__ == '__main__':
spider = RenRenLogin()
spider.run()