首页 编程教程正文

某src公益厂商域名爬取

piaodoo 编程教程 2020-02-22 22:02:11 941 0 python教程

本文来源吾爱破解论坛

本帖最后由 ofk 于 2019-3-20 13:51 编辑

新人发个帖,以免被删了,哈哈哈。
首先,看看我们需要爬取得网站,
url:https://butian.360.cn/Reward/plan

5.jpg (134.8 KB, 下载次数: 0)

下载附件  保存到相册

2019-3-20 10:31 上传


使用fiddler抓包分析一波,开启浏览器代{过}{滤}理,点击公益厂商这个按钮:

2.png (121.76 KB, 下载次数: 0)

下载附件  保存到相册

2019-3-20 10:12 上传


可以看到链接为http://butian.360.cn/Reward/pub,向服务器请求了三个参数,一个s,一个p,一个token,再看看这个参数的含义,访问第二页看看,参数变化:

3.jpg (150.44 KB, 下载次数: 0)

下载附件  保存到相册

2019-3-20 10:17 上传


发现参数p的值发生了变化,变为2,所以p参数就是页码了,其他的参数就不用再了解了,知道了页码,就可以爬取不同页码的链接,
我们需要爬取的是域名,看看域名所在的地方:

4.jpg (63.26 KB, 下载次数: 0)

下载附件  保存到相册

2019-3-20 10:23 上传


这里有个cid参数,这个参数的值代表了某个厂商,把链接记下来:
https://butian.360.cn/Loo/submit?cid=xx
xx是需要自己去填入,填入后就可获得域名了。
xx在哪提取呢?看看

6.jpg (390.32 KB, 下载次数: 0)

下载附件  保存到相册

2019-3-20 10:55 上传


xx的值可在json数据中提取,
开始编写代码吧:
[Python] 纯文本查看 复制代码
#coding:utf-8
from urllib import request,parse
import re

url = "http://butian.360.cn/Reward/pub"
data = {
        's':1,
        'p':1,
        'token':''
}
headers = {
        'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8',
        'Accept-Encoding': 'gzip, deflate, br',
        'Accept-Language': 'zh-CN,zh;q=0.9',
        'Cache-Control': 'max-age=0',
        'Connection': 'keep-alive',
        'Cookie': '你的cookie',
        'Host': 'butian.360.cn',
        'Referer': 'https://butian.360.cn/',
        'Upgrade-Insecure-Requests': 1,
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.100 Safari/537.36 QIHU 360EE'
}
data = parse.urlencode(data).encode('utf-8')#对post请求参数进行url编码
changshang = request.Request(url, data = data, headers=headers, method='POST')
respones = request.urlopen(changshang).read().decode('utf-8')
#正则匹配需要的内容----cid值
parrtern = re.compile(r'\"company_id\":\"(\d*?)\"')
text = parrtern.findall(respones)

for i in range(len(text)):
        
        url = "https://butian.360.cn/Loo/submit?cid="+text[i]
        yuming = request.Request(url,headers=headers)
        respones = request.urlopen(yuming).read().decode('utf-8')
        #正则匹配需要的内容----域名和厂商
        parrtern1 = re.compile(r'<span>厂商名称:.*?value="(.*?)"')
        parrtern2 = re.compile(r'<span>所属域名:.*?value="(.*?)"')
        text1 = parrtern1.findall(respones)
        text2 = parrtern2.findall(respones)
        print(text1[0]+'-----------'+text2[0])


先爬第一页看看:

7.jpg (145.83 KB, 下载次数: 0)

下载附件  保存到相册

2019-3-20 12:58 上传



成功爬取了一页的厂商域名,
现在改一下代码,让代码有一点交互性:[Python] 纯文本查看 复制代码
#coding:utf-8import re
from urllib import request,parse
import gzip


#爬取公益厂商的id
def get_Con(ye):

        url = "http://butian.360.cn/Reward/pub"
        data = {
                's':1,
                'p':ye,
                'token':''
        }
        
        data = parse.urlencode(data).encode('utf-8')#对post请求参数进行url编码
        changshang = request.Request(url, data = data, headers=headers, method='POST')
        respones = request.urlopen(changshang).read().decode('utf-8')
        #正则匹配需要的内容----cid值
        parrtern = re.compile(r'\"company_id\":\"(\d*?)\"')
        text = parrtern.findall(respones)
        # print(text)
        return text
        

def get_Url(id):
        global count
        url = 'http://butian.360.cn/Loo/submit?cid='+id
        yuming = request.Request(url,headers=headers)
        respones = request.urlopen(yuming).read()
        #由于网页时gzip编码的,所以需要解码
        f = gzip.decompress(respones).decode('utf-8')
        #正则匹配需要的内容----域名和厂商
        parrtern1 = re.compile(r'<span>厂商名称:.*?value="(.*?)"')
        parrtern2 = re.compile(r'<span>所属域名:.*?value="(.*?)"')
        text1 = parrtern1.findall(f)
        text2 = parrtern2.findall(f)

        data = text1[0] + '------' + text2[0]
        # print(data)
        filename.write(data+'\n')
        count = count + 1

        




headers = {
        'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8',
        'Accept-Encoding': 'gzip, deflate, br',
        'Accept-Language': 'zh-CN,zh;q=0.9',
        'Cache-Control': 'max-age=0',
        'Connection': 'keep-alive',
        'Cookie': '你的cookie',
        'Host': 'butian.360.cn',
        'Referer': 'https://butian.360.cn/',
        'Upgrade-Insecure-Requests': 1,
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.100 Safari/537.36 QIHU 360EE'
}

x = int(input('请输入开始页码:'))
y = int(input('请输入结束页码:'))

#创建一个文件
filename = open('butian.txt','a')
count = 0
def main():
        for i in range(x,y+1):
                id = get_Con(i)
                for i in id:
                        get_Url(i)
        print("爬取了%d个"%(count))
        print("------爬取完毕------")
        filename.close()
                

if __name__ == "__main__":
    main()
    
运行后就会在目录下生产一个butian.txt,里面是爬取的厂商域名
原本想使用多线程的,但是写完发现爬不到,并且卡死,所以就没有使用多线程。
可能是我的代码死锁了。
本代码没有cookie,所以cookie自己填入就可以了。有哪些不对的地方请各位大佬指出,学习学习!

版权声明:

本站所有资源均为站长或网友整理自互联网或站长购买自互联网,站长无法分辨资源版权出自何处,所以不承担任何版权以及其他问题带来的法律责任,如有侵权或者其他问题请联系站长删除!站长QQ754403226 谢谢。

有关影视版权:本站只供百度云网盘资源,版权均属于影片公司所有,请在下载后24小时删除,切勿用于商业用途。本站所有资源信息均从互联网搜索而来,本站不对显示的内容承担责任,如您认为本站页面信息侵犯了您的权益,请附上版权证明邮件告知【754403226@qq.com】,在收到邮件后72小时内删除。本文链接:https://www.piaodoo.com/7367.html

搜索