C1imber's Blog

python爬取补天src列表

Word count: 1.1kReading time: 4 min
2018/04/17 Share

用python爬取补天src列表

分享一个我写的代码,用python爬取补天src列表,同时可以爬取网站域名和漏洞的提交数和处理数,以公益src为例,贴出我写的代码

# -*- coding: utf-8 -*-
import requests
from bs4 import BeautifulSoup
url="http://loudong.360.cn/Reward/pub"
for pnum in range(1,160):
    r=requests.post(url=url,data={'s':1,'p':pnum}).json()
    for info in r["data"]["list"]:
        company_name=info["company_name"]
        company_url="http://loudong.360.cn/Company/"+info["company_id"]
        html=requests.get(url=company_url).content
        soup=BeautifulSoup(html,"lxml")
        num=soup.find_all(class_="spp")
        print "漏洞数:",num[0].string,"已处理:",num[1].string
        surl="http://loudong.360.cn/Loo/submit?cid="+info["company_id"]
        headers={"Cookie":"你登陆后的cookie"}
        html=requests.get(url=surl,headers=headers).content
        soup=BeautifulSoup(html,"lxml")
        site=soup.find("input",attrs={"placeholder":"请输入厂商域名"})["value"]
        print company_name
        print site
        print u"漏洞数:", num[0].string, u"已处理:", num[1].string
        print "-------------------------------------------------------------------------------------------------"

爬取时需要用到的库

requests库和bs4库

补天还是十分好爬的,只要分析好每次请求和响应,爬下关键请求的页面,用bs4的BeautifulSoup解析提取数据即可

关于BeautifulSoup,自己写代码很喜欢用,提取数据很方便,官方文档写的非常详细

运行结果
mark

总结

个人常用

request库常用总结

html=requests.get(url=url,params={params},headers={headers},cookies={cookies},proxies={proxies}).content
用于http GET方法请求的页面,需要提交参数时可以直接在url的?后加参数,也可以将GET请求参数以字典的数据类型赋值给request库get方法中params参数进行提交
参数作用:

params:字典数据类型,存放http请求的GET参数

headers:字典数据类型,里面内容为http的一些请求头,比如Host,User-Agent,主要用来突破一些网站的防爬机制,cookie值也能放到这个里面

cookies:字典数据类型,用来存放cookie值

proxies:字典数据类型,爬取页面所需要设置的代理,比如爬取谷歌和一些国外网站,因为国内被墙了,搭了ss才能访问,但是直接用python请求页面还是不行,这时候就需要在这里进行设置了,我一般是这样设置的,因为我ss客户端设在了本地1088端口:
proxies={"http":"http://127.0.0.1:1088","https":"https://127.0.0.1:1088"}

html=requests.post(url=url,data={data},headers={headers},cookies={cookies},proxies={proxies}).content
用于http POST方法请求的页面

data:字典数据类型,POST提交的参数

headers,cookie,proxies:均和上述的作用一致

re库常用总结

p=re.compile(r"编写的正则表达式")
用来编译正则表达式对象并且返回一个正则表达式对象
list=p.findall(页面)
匹配页面中和正则表达式匹配的数据并且将所有结果以列表的形式返回
关于正则表达式,需要多加练习,每个人都有不一样的编写正则方法,只要能将需要的数据精确完整匹配出来的方法都是好方法,特别需要注意贪婪匹配和非贪婪匹配的区别和用法(.*?|.*+)

bs4库的BeautifulSoup常用总结

使用BeautifulSoup提取数据,首先要了解html DOM格式:
简单来说就是,<标签 属性="属性值">文本</标签>

from bs4 import BeautifulSoup
soup=BeautifulSoup(html,"lxml")
返回一个BeautifulSoup对象,我一般比较喜欢用lxml格式解析页面,用多了自然就成习惯了
list=soup.find_all(html标签属性=属性值)
寻找html所有匹配"html标签属性=属性值"的html标签并以列表的形式返回,列表中每个值的类型均为BeautifulSoup对象
for i in list:
    i["属性"]用来提取某一属性下的属性值
    i.string用来提取html标签中的文本

urllib库常用总结

urllib.urlretrieve(url,filename)
urllib库的urlretrieve方法主要用来下载文件,通常将页面爬下来后,用正则表达式或者BeautifulSoup将jpg,png一些图片,xls,doc一些文档,或者mp4等视频连接爬下来后,一般都需要用这个库下载
url:资源的链接
filename:文件存放的位置,我一般这样写,filename=yourfilepath+url.split('/')[-1],比较方便

官方文档链接

BeautifulSoup官方文档

requests官方文档

CATALOG
  1. 1. 用python爬取补天src列表
    1. 1.0.1. 总结
    2. 1.0.2. 官方文档链接