适用网站及场景 抓取需要登录才能访问的页面:有的网站你得登进去才能看到页面,直接访问网页地址会给你跳转到登录页面
cookie和session机制 Http协议为无连接协议 cookie存放在客户端浏览器,session存放在web服务器
方法一:requests.get()中参数headers参数中携带你的cookie
先登录成功1次,获取到携带登录信息的cookie:登录成功–个人主页–F12抓包–刷新个人主页抓包–一般会在前几个包中有你的cookie信息 携带着cookie发请求 抓取人人网资源示例
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()
方法二:requests.get()中使用cookies参数(需要将cookies处理成字典)
拿到cookie字符串 将cookie转成字典 发requests.get()请求时发携带cookies
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
#以下开始解析并输出