bs4库学习

 1 # -*- coding:utf-8 -*-
 2 import bs4
 3 import requests
 4 
 5 def tags_val(tag, key='', index=0):
 6     '''
 7     tag指HTML元素,如:<a href="http://meilizhichengwk027.fang.com/chengjiao/-p11-t12/" class="" id="rent">出租</a>,
 8     通过bs4的select获取元素,tag = bs4.BeautifulSoup(response.text,'html.parser');
 9     key指元素的属性,如:key='id';
10     index指元素序号,如果tag有多个相同的,通过序号获取精确的其中一个;
11     最终返回元素属性指,如id的值为rent。或key不传入参,返回tag文本,如'出租'
12     '''
13     if len(tag) == 0 or len(tag) <= index:
14         return ''
15     elif key:
16         txt = tag[index].get(key)
17         return txt.strip(' \t\r\n') if txt else ''
18     else:
19         txt = tag[index].text
20         return txt.strip(' \t\r\n') if txt else ''
21 
22 def tag_val(tag, key=''):
23     '''
24     与tags_val用法类似,但是不传index,也就是要能通过selector获取到唯一的元素,然后通过key返回元素属性值或文本
25     '''
26     if tag is None:
27         return ''
28     elif key:
29         txt = tag.get(key)
30         return txt.strip(' \t\r\n') if txt else ''
31     else:
32         txt = tag.text
33         return txt.strip(' \t\r\n') if txt else ''
34 
35 #使用requests.Session(),能够保存每次返回的cookie,让下次发送请求时带上保存的cookie
36 session = requests.Session()
37 response = session.get('http://meilizhichengwk027.fang.com/chengjiao/')
38 html = bs4.BeautifulSoup(response.text,'html.parser')
39 # 当时用 html.select('.dealSent.sentwrap tr:nth-child(2) p:nth-child(1)')时,会报错,不支持此用法,但是在chrome的console是可以获取到元素的
40 tags = html.select('.dealSent.sentwrap tr:nth-of-type(2) p:nth-of-type(1)')
41 print tags
42 print tags_val(tags)

结果:

[<p><b><a href="http://esf.wuhan.fang.com/chengjiao/433513_1.htm" target="_blank">1\u5ba41\u5385</a></b></p>]
1室1厅

posted @ 2018-07-18 22:50  毛毛虫也疯狂  阅读(232)  评论(0编辑  收藏  举报