获取的response如下如:

因此可写出如下正则,从左到右分派匹配出ID、产物名称、刊行机构、刊行时刻、产物限期、投资行业、首页收益。
- # 界说第3个函数parse_content_1,用来理会并匹配第一层网页内容,此处行使正则表达式要领
- def parse_content_1(response):
-
- # 写正则举办所需数据的匹配
- re_1 = re.compile(
- r'{"ROWID".*?"ID":"(.*?)","Title":"(.*?)","producttype".*?"issuers":"(.*?)","released":"(.*?) 0:00:00","PeriodTo":(.*?),"StartPrice".*?"moneyinto":"(.*?)","EstimatedRatio1":(.*?),"status":.*?"}')
- contents = re_1.findall(response)
- return contents
⑤ 理会第二层网页的内容并输出数据
第二层行使bs4中的select+选择器的要领来举办。除了第一层所提取的数据外,还必要刊行地、收益分派方法、刊行局限、最低收益、最高收益和利率品级漫衍环境。
网页如下,可见,我们所必要的信息潜匿在一个又一个tr标签里,而这个tr标签处于id=“procon1”下的一个table标签里(此处有个坑,就是从网页来看,table下尚有个tbody标签,而现实获得的相应里并没有)。

因为我们不是全部的信息都要,以是我们可以一个一个的提取,最终输出个数据。代码如下(这中间用到了前面提到的选择器常识和一些字符串处理赏罚要领):
- # 界说第4个函数parse_content_2,用来理会并匹配第二层网页内容,并输出数据,此处行使BeautifulSoup要领
- def parse_content_2(response,content):
-
- # 行使bs4举办爬取第二层信息
- soup = BeautifulSoup(response)
-
- # 爬取刊行地和收益分派方法,该信息位于id为procon1下的table下的第4个tr里
- tr_3 = soup.select('#procon1 > table > tr')[3]
- address = tr_3.select('.pro-textcolor')[0].text
- r_style = tr_3.select('.pro-textcolor')[1].text
-
- # 爬取刊行局限,该信息位于id为procon1下的table下的第5个tr里
- tr_4 = soup.select('#procon1 > table > tr')[4]
- guimo = tr_4.select('.pro-textcolor')[1].text
- re_2 = re.compile(r'.*?(d+).*?', re.S)
- scale = re_2.findall(guimo)[0]
- # 爬取收益率,该信息位于id为procon1下的table下的第8个tr里
- tr_7 = soup.select('#procon1 > table > tr')[7]
- rate = tr_7.select('.pro-textcolor')[0].text[:(-1)]
- r = rate.split('至')
- r_min = r[0]
- r_max = r[1]
-
- # 提取利率品级
- tr_11 = soup.select('#procon1 > table > tr')[11]
- r_grade = tr_11.select('p')[0].text
-
- # 生涯数据到一个字典中
- item = {
- '产物名称':content[1],
- '刊行机构':content[2],
- '刊行时刻':content[3],
- '产物限期':content[4],
- '投资行业':content[5],
- '首页收益':content[6],
- '刊行地': address,
- '收益分派方法': r_style,
- '刊行局限': scale,
- '最低收益': r_min,
- '最高收益': r_max,
- '利率品级': r_grade
- }
-
- # 返回数据
- return item
(编辑:湖南网)
【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!
|