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

虽然不算多 但是信息很详细呀 忍不住想爬呀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/’ 让它变成一个完整的链接
代码:
01
02
03
04
05
06
07
08
09
10
11
12
13
14
|
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中
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的字符
1
2
3
4
5
6
7
8
|
def saveData 2 MongoDB ( 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 获取数据
0x04 说在最后
写完爬虫 爬完数据保存后 第二天起床发现
???一脸懵逼
如果过几天看不到我 那我可能跑路去了