Python系列之——网贷信用黑名单信息爬虫【转】

0x00 前言

前几天在华盟的微信群里面听到大牛们在讨论一个
叫做”中国信用黑名单(www.zhongguoxinyongheimingdan.com)”的网站
百度搜了一下 发现已近打不开了 好气啊
但是在搜索结果下面看到一个类似的

点进去看了一下
卧槽 这么详细的信息 下面的分页模块显示一共有1642条信息
虽然不算多 但是信息很详细呀 忍不住想爬呀
0x01 分析

在数据列表页面时候的url是这样的
http://www.p2pblack.com/cheat/fr … =1&showCount=20
‘currentPage’ 顾名思义就是当前页, ’showCount’ 也就是需要显示的条数
每个放数据的div里头会有一个a标签链接到对应的详细信息显示界面

详细信息显示界面like this

所有的信息都放在一个div里面

用Python的Xpath模块毫无压力的说
我的思路是:

Step0:把’showCount’改成200
Step1:然后遍历所有数据的url
Step2:用Xpath取出所有数据
Step3:保存数据到MongoDB(第一次用 原本想存Mysql的 但是存进去中文显示一堆问号 Maybe字符集问题吧)


0x02 爬虫

数据列表界面所有详细信息URL的Xpath : //*[@id=”listform”]/a/@href
因为获取所有a标签后得到的是一个列表
所以要先获取所有a标签后再遍历获取所有的href属性
获取href后还要加上’http://www.p2pblack.com/’ 让它变成一个完整的链接
代码:

[Python] 纯文本查看 复制代码
01
02
03
04
05
06
07
08
09
10
11
12
13
14
def getInfoUrls(url):        sourceUrl = 'http://www.p2pblack.com/'
        flag = True
        while flag:
                try:
                        r = requests.get(url,timeout=3)
                        flag = False
                        htmlObj = etree.HTML(r.text)
                        cPageAllInfo = htmlObj.xpath(r'//*[@id="listform"]/a')
                        infoUrls = []
                        for infomation in cPageAllInfo:
                                infoUrls.append(sourceUrl + infomation.xpath(r'@href')[0])
                        return infoUrls
                except:
                        continue


详细信息列表的图片我就不保存了 因为对我来说这些资料也没啥用 就不浪费硬盘空间去存了= =
姓名列Xpath : /html/body/div[7]/div/div[1]/div[1]/div[2]/p[1]/span[2]/text()
证件号码列Xpath : /html/body/div[7]/div/div[1]/div[1]/div[2]/p[2]/span[2]/text()
联系方式列Xpath : /html/body/div[7]/div/div[1]/div[1]/div[2]/p[3]/span[2]/text()
欠款金额列Xpath : /html/body/div[7]/div/div[1]/div[1]/div[2]/p[4]/span[2]/text()
借款期限列Xpath : /html/body/div[7]/div/div[1]/div[1]/div[2]/p[5]/span[2]/text()
逾期时间列Xpath : /html/body/div[7]/div/div[1]/div[1]/div[2]/p[6]/span[2]/text()
发布者评论列Xpath : /html/body/div[7]/div/div[1]/div[1]/div[2]/p[7]/span[2]/text()
获取完数据后放在一个字典里然后存到MongDB中

[Python] 纯文本查看 复制代码
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
def fromUrlGetInfo(url):        citizenInfo = {}
        flag = True
        while flag:
                try:
                        r = requests.get(url,timeout=3)
                        flag = False
                except:
                        continue
                htmlObj = etree.HTML(r.text)
                citizenInfo['personName'] = htmlObj.xpath(r'/html/body/div[7]/div/div[1]/div[1]/div[2]/p[1]/span[2]/text()')[0]
                citizenInfo['certNum'] = htmlObj.xpath(r'/html/body/div[7]/div/div[1]/div[1]/div[2]/p[2]/span[2]/text()')[0]
                citizenInfo['contactInfo'] = htmlObj.xpath(r'/html/body/div[7]/div/div[1]/div[1]/div[2]/p[3]/span[2]/text()')[0]
                citizenInfo['oweMoney'] = htmlObj.xpath(r'/html/body/div[7]/div/div[1]/div[1]/div[2]/p[4]/span[2]/text()')[0]
                citizenInfo['timeLimit'] = htmlObj.xpath(r'/html/body/div[7]/div/div[1]/div[1]/div[2]/p[5]/span[2]/text()')[0]
                citizenInfo['overTime'] = htmlObj.xpath(r'/html/body/div[7]/div/div[1]/div[1]/div[2]/p[6]/span[2]/text()')[0]
                citizenInfo['publishComm'] = htmlObj.xpath(r'/html/body/div[7]/div/div[1]/div[1]/div[2]/p[7]/span[2]/text()')[0]
                saveData2MongoDB(citizenInfo)


存进MongoDB时先将数据编码成UTF-8的字符

[AppleScript] 纯文本查看 复制代码
1
2
3
4
5
6
7
8
def saveData2MongoDB(infoData):
        for i in infoData:
                infoData = infoData.encode('utf-8','ignore')
        print infoData
        conn = pymongo.MongoClient()
        laolaiinfo = conn.laolaiinfo
        informations = laolaiinfo.informations
        informations.insert(infoData)


完整代码就不给出啦 有了上面这仨函数 只要会for循环语句就可以把全部信息爬下来了

0x03 获取数据

先开启MongoDB

浏览器访问http://127.0.0.1:27017/
能访问就说明开启成功了

运行爬虫

写了多线程来跑 大概几分钟就跑完了
查看数据

导出

 

0x04 说在最后

写完爬虫 爬完数据保存后 第二天起床发现

???一脸懵逼
如果过几天看不到我 那我可能跑路去了

此条目发表在未分类, 经验技术分类目录。将固定链接加入收藏夹。