Python爬虫之微打赏爬虫网站分析代码

昨天有学员问我爬虫的问题,说xpath语法写出来没数据。其实可能是其他地方错了,而不是xpath语法的问题,我们需要学会找错误的原因。

  • 打印下请求的内容,看有没有你要的数据。
  • 没有的话,是不是请求错误。
  • 请求成功是不是异步加载。 这样一步步排错。 今天继续这位学员的问题,他需要爬取微打赏的数据。

网站分析

  • 打开网站,翻页网页不变,看看是post的请求,很好办,直接把参数怼进去,这里只要切换page就能进行翻页。
  • json格式 这里post返回的是json数据,解析json数据就行,小技巧:看preview,解析起来嗖嗖哒(一般人我不告诉他,记得来波赞)。这里需要提取活动的名称,id和参与打赏的人数。这个后面详细页用的到。
  • 详细页 依旧是post,依旧是json数据,这里的参数pro_id为之前的爬取的id,这一页20个信息,通过前面的参与打赏人数构造出有多少页,继续怼参数。

代码

import requests
import json
import math

def get_sup_info(url,page):
    params = {
        'ajaxtype':1,
        'page':page,
        'category':1,
        'pageSize':8
    }
    cookies = {
        'User-Agent':'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/57.0.2987.133 Safari/537.36',
        'Cookie':'acw_tc=AQAAAKLQ3U/WTAYAggq7PZ24WOlm9vQW; PHPSESSID=r0nbvk7hppjftegk4fpt9cu535; _uab_collina=150094753858198811653567; mdswv=v1.0; mdsa=MD-STICS-5976a44746eca; mdss=6-o; mdsf=md; mdsff=www_so_com; ci_session=a%3A5%3A%7Bs%3A10%3A%22session_id%22%3Bs%3A32%3A%22caefb4c752d5877e1c5aa4aa5df37e99%22%3Bs%3A10%3A%22ip_address%22%3Bs%3A14%3A%22123.57.117.133%22%3Bs%3A10%3A%22user_agent%22%3Bs%3A109%3A%22Mozilla%2F5.0+%28Windows+NT+6.1%3B+WOW64%29+AppleWebKit%2F537.36+%28KHTML%2C+like+Gecko%29+Chrome%2F57.0.2987.133+Safari%2F537.36%22%3Bs%3A13%3A%22last_activity%22%3Bi%3A1500949741%3Bs%3A9%3A%22user_data%22%3Bs%3A0%3A%22%22%3B%7D688590410f74ae5570846b68edaa6a67; u_asec=090%23qCQXOTXPXpnXuvi0XXXXXuS8vzgEjU05DQJMOF5UA9EUDzQmhY5%2BGl8VXvXQMcYTnuxiXXf8AfIwSTQXU6hnXXa3HoQCh9T4gY73OjjeG%2FXUHYVms%2BhnDXG3Hoqhh9kvan73O51TXvXuLWQ5Hfv5oTQXaOXTs7%2BZhPNGlTQXFdOVReD%2FItB4na8Dnin5Lm97WiM5ra4hxeC7S3lO6usAcNvwY4vCdr7HxBzviaxEIhQGz7LKItio9zCD7XwC65ZVdC6hXZCHFeYVapLaISEbstnWekYGxg9lzXcEX5lZOhntBpwW6glEhtlW9kNvXvXKxprV%2B%2FSVO5OeHhobpDlHgCz6CITLvzBvaOviXXFKMieaRAn%3D; SERVERID=75c0ee4e77ef78c56ac6e5a297fdd0b8|1500949742|1500947526'
    }
    html = requests.post(url, data=params, headers=cookies)
    json_data = json.loads(html.text)
    des = json_data['des']
    for data in des:
        name = data['name']
        id = data['id']
        pay_count = data['pay_count']
        all_page = math.ceil(int(pay_count)/20)
        for i in range(1,int(all_page)+1):
            get_app_info(i,id,name)


def get_app_info(page,id,name):
    params = {
        'pro_id': id,
        'type': '1',
        'page': page,
        'pageSize': '20'
    }
    cookies = {
        'User-Agent':'xx',
        'Cookie':'xx'
    }
    html = requests.post('https://wds.modian.com/ajax_backer_list',data=params,headers=cookies)
    json_data = json.loads(html.text)
    datas = json_data['data']
    for data in datas:
        nickname = data['nickname']
        money = data['total_back_amount']
        print(name,nickname,money)

if __name__ == '__main__':
    for i in range(1,10):
        get_sup_info('https://wds.modian.com/ajax_first',i)

请求头加上,这里就爬取了10页做实验,打印输出没有进行数据存储。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

扫码关注云+社区