爬虫1

最简单的爬虫练习

看要爬什么
之前每次爬东西都是去搜索学习,后来发现requests包太好用,太简单了。
首先看看要爬什么东西,以网贷之家为例:
为了爬取所有平台的基本信息,https://www.wdzj.com/dangan/,也就是这里平台的档案,
360浏览器鼠标右键->审查元素,点击network,然后刷新一下页面,再点击下面一栏中的xhr,谷歌浏览器要f12打开。
观察这里在这里插入图片描述
可以看到name下面出现利很多的返回文件,挨个点击看看,右边的preview会出现什么,这个网站申请的地方是会把所有平台的编号和中文名字返回到dangan_search.json这个文件里,这样后面拼接的时候就方便多了。
鼠标放在上面的时候会提示出一个网址,就是https://www.wdzj.com/wdzj/html/json/dangan_search.json这个,等会儿直接请求这个网址会返回右边preview返回的json文件。
在平台列表页面https://www.wdzj.com/dangan/随便选择一个平台点进去,同样点进去xhr看看返回的有什么,
在这里插入图片描述
可以看到点击蓝色这里会出来这个平台的明细的json文件,返回这个json的网址是 https://wwwservice.wdzj.com/api/plat/platData30Days?platId=498,展示在右边的preview里面,要爬取的就是根据上面每个平台的id去拼接替换这个498:
代码就是这样了:

import requests
import json
import datetime
import pandas as pd
import requests
import random
#from bs4 import BeautifulSoup
import json
import datetime
import time
# import pymysql
user_agent = 'User-Agent: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; Maxthon 2.0)' #用来伪装用户身份
headers = {'User-Agent':user_agent}
p2plist_url='http://www.wdzj.com/wdzj/html/json/dangan_search.json' #刚刚找到用来存放平台的JSON数据页面
print ('正在抓取……')
s1=datetime.datetime.now() 
r=requests.get(p2plist_url,headers)
content=r.text
content=json.loads(content) #加载JSON数据
s2=datetime.datetime.now()
s3=(s2-s1).total_seconds()
print ('抓取完成^\n共用时%s秒' % round(s3))

data0=pd.DataFrame(columns=['id','name','pinyin'])
for i in range(len(content)):
    x=content[i]
    data0.loc[i,['name','id','pinyin']]=[x['platName'],x['platId'],x['platPin']] 
data0=data0.sort_values(by='id',ascending=False)
#print(type(data0[data0.id==32].name))
USER_AGENT_LIST=[
    "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.1 (KHTML, like Gecko) Chrome/22.0.1207.1 Safari/537.1",
    "Mozilla/5.0 (X11; CrOS i686 2268.111.0) AppleWebKit/536.11 (KHTML, like Gecko) Chrome/20.0.1132.57 Safari/536.11",
    "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/536.6 (KHTML, like Gecko) Chrome/20.0.1092.0 Safari/536.6",
    "Mozilla/5.0 (Windows NT 6.2) AppleWebKit/536.6 (KHTML, like Gecko) Chrome/20.0.1090.0 Safari/536.6",
    "Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.1 (KHTML, like Gecko) Chrome/19.77.34.5 Safari/537.1",
    "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/536.5 (KHTML, like Gecko) Chrome/19.0.1084.9 Safari/536.5",
    "Mozilla/5.0 (Windows NT 6.0) AppleWebKit/536.5 (KHTML, like Gecko) Chrome/19.0.1084.36 Safari/536.5",
    "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/536.3 (KHTML, like Gecko) Chrome/19.0.1063.0 Safari/536.3",
    "Mozilla/5.0 (Windows NT 5.1) AppleWebKit/536.3 (KHTML, like Gecko) Chrome/19.0.1063.0 Safari/536.3",
    "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; Trident/4.0; SE 2.X MetaSr 1.0; SE 2.X MetaSr 1.0; .NET CLR 2.0.50727; SE 2.X MetaSr 1.0)",
    "Mozilla/5.0 (Windows NT 6.2) AppleWebKit/536.3 (KHTML, like Gecko) Chrome/19.0.1062.0 Safari/536.3",
    "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/536.3 (KHTML, like Gecko) Chrome/19.0.1062.0 Safari/536.3",
    "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; 360SE)",
    "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/536.3 (KHTML, like Gecko) Chrome/19.0.1061.1 Safari/536.3",
    "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/536.3 (KHTML, like Gecko) Chrome/19.0.1061.1 Safari/536.3",
    "Mozilla/5.0 (Windows NT 6.2) AppleWebKit/536.3 (KHTML, like Gecko) Chrome/19.0.1061.0 Safari/536.3",
    "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/535.24 (KHTML, like Gecko) Chrome/19.0.1055.1 Safari/535.24",
    "Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/535.24 (KHTML, like Gecko) Chrome/19.0.1055.1 Safari/535.24"
]
url='https://wwwservice.wdzj.com/api/plat/platData30Days?platId='+str(32)
ua=random.choice(USER_AGENT_LIST)
head={'User-Agent':ua}
r=requests.get(url,headers=head,timeout=5)
# html=r.content#网页直接爬可能乱码
# html_doc=str(html,'utf-8')
# print(html_doc)
# ss=BeautifulSoup(r.text,'lxml')
re=json.loads(r.text)
# print(re)
col=list(re['data']['platOuterVo'].keys())
import requests
import random
from bs4 import BeautifulSoup
import json
import datetime
import time
def getjsons(id):
    url='https://wwwservice.wdzj.com/api/plat/platData30Days?platId='+str(id)
    ua=random.choice(USER_AGENT_LIST)
    head={'User-Agent':ua}
    r=requests.get(url,headers=head,timeout=5)
    # html=r.content#网页直接爬可能乱码
    # html_doc=str(html,'utf-8')
    # print(html_doc)
    # ss=BeautifulSoup(r.text,'lxml')
    re=json.loads(r.text)
    return re
j=1
result=pd.DataFrame(columns=col)
data1=data0[data0.id<=3500]
for i in list(data1.id):
    print(str(i)+':当前爬'+str(data1[data1.id==i].name)+'平台')
    try:
        time.sleep(random.randint(2,5))
        rei=getjsons(i)
        result.loc[i,:]=list(rei['data']['platOuterVo'].values())
    except  Exception as e:
        print(e)
        continue
        result.to_excel('wdzj0.xlsx')    
    print('finished:'+str(j))
    j=j+1
result.to_excel('wdzj0.xlsx')

这里用的requests中的get,请求头设置随机选取,数据量不是很大,所有爬起来很快很方便。如果网页返回的不是json就只能把爬下来的网页做解析了。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值