python--通过cookie方式抓取js请求方法

1.进入一个丁香园的论坛,通过谷歌开发者工具查看头部信息
在这里插入图片描述
2.复制粘贴相关的头部信息,这里的cookie为登陆之后的cookie,所以需要注册一个丁香园的账号
以后会跟新相关的通过requests携带cookie的方式进行爬去,因为这样就不用每次都要去粘贴cookie的相关信息:
在这里插入图片描述
3.找到相关的js请求,分析和查看对应的返回结果
在这里插入图片描述

import requests
import json
import re
import os
import time
#难点(这里针对我这种初学者来说的难点,见谅)1.需要构造头部信息(避免简单的反扒机制) 2.设置cookie信息(需要获取全部回复就需要登陆账号) 3.js相关接口url的分析(对应的接口url,以及返回的数据结构)
#第一步:像这种需要用到cookie的网站最好还是自己注册一个账号,登陆后获取到服务器发送的cookie信息,然后填充到headers里面
#第二步:复制粘贴浏览器头部信息,和referer信息,这两个信息一个为浏览器信息,一个为跳转网站信息
#第三步:分析接口参数,其实不难发现,丁香论坛的回复内容都是通过js的请求获得的参数,我们只需要把全局里面的请求url地址复制过来就行了
#第四步:分析接口数据,通过接口数据可以看到,所有人员的回复都在items字典中,而对应的内容都装在了body里面了,所以只要把body里面的内容拿出来就完成了
#第五步:撸起袖子开干

#定义爬取内容方法
def spider_parse_detail(dxy_url):
    ret=requests.get(dxy_url,headers=headers)
    #判断状态码
    if ret.status_code==200:
        #将数据转化为字典
        dxy_response=ret.content.decode()
        content_dict=json.loads(dxy_response)
        #获取字典body内容
        body_data=content_dict.get('items','无对应的key')
        #取出username,body
        for answer_content in body_data:
            username=answer_content.get('username')
            body=answer_content.get('body')
            if 'img' in body:
                body='图片地址:'.join(re.findall('(.*?)<br />.*?src="(.*?)"',body,re.S)[0])
            if 'div' in body:
                body=''.join(re.findall('<div class="quote"><blockquote><strong>(.*?) </strong><br />(.*?)<br /></blockquote></div><br />(.*?)',body,re.S)[0])
            if '<br />' in body:
                body=body.replace('<br />','')
            if '<a' in body:
                body=''.join(re.findall('(.*?)<a href="(.*?).*?".*?</a>',body,re.S)[0])
            write_content(username+'\n'+body)
    else:
        print('状态码为:{}'.format(ret.status_code))

def write_content(movie_info):
    '''
    将解析后的内容写入一个txt的文档中
    '''
    path=os.getcwd()+'\\spider_db\\dxy.txt'
    if os.path.exists('spider_db'):
        with open(path, 'a+', encoding='utf-8') as fp:
            fp.write(movie_info+'\n')
    else:
        os.makedirs('spider_db')
        with open(path, 'a+', encoding='utf-8') as fp:
            fp.write(movie_info+'\n')

if __name__=="__main__":
    url = 'http://3g.dxy.cn/bbs/bbsapi/mobile?s=view_topic&checkUserAction=1&withGood=1&order=0&size=20&id=509959&page={}'
    headers = {
        'Referer': 'http://3g.dxy.cn/bbs/topic/509959',
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.119 Safari/537.36',
        'Cookie': 'cookie就不展示了'
    }
    for page in range(1,3):
        spider_parse_detail(url.format(page))
        time.sleep(1)`

最终结果
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值