- select 函数返回的数据是列表,即使它只有一个。
那么当我们只采集单页面 不想 用 for 赋值 zip() 的时候我们就需要对该列表里面的函数进行选择。
title = soup.select('div.pho_info > h4')[0].text
这里面是选择第一项 然后对他取文本的意思。
而这里面为什么选择 div.pho_info > h4 是因为 这是里标题最近的 单独 纯在好找的 一个层级。
在具体页面里面,一般向获取的元素都是在自己单独的一个div 或者样式里面,而在这里面我们获取自己想要的元素就是通过 找到要获取元素所在div ,然后再找他的样式结构。
address = soup.select('div.pho_info > p')[0].get('title')
这里面的 返回值, 用什么来接 就返回到哪里。
要爬取具体内容页面时 首先就要得到他的具体链接地址,而具体链接地址是放在列表页面的,那么我们就需要一个函数来爬取列表页面,然后把获取到的内容页面链接放入到一个空列表里面。
- 从列表页面获取到内容的链接, 那么我们就要找这些内容链接有什么相同的 属性, 这里面找到的是
resule_img_a
这个标签是存在于a 标签里面的,
所以写为,a.resule_img_a
soup.select('a.resule_img_a'):
自己在学了这之后有一点感觉不一样但又说不出来这和之前的 筛选又有什么区别, 于是努力回想 如果按照之前的筛选方法 一般都是在要选的链接上, 右键复制 selector 然后 在看要获取的属性。
- 直接一步添加自己要爬的内容页面
我的代码
from bs4 import BeautifulSoupimport requestsurl = 'http://bj.xiaozhu.com/fangzi/1508951935.html'wb_data = requests.get(url)soup = BeautifulSoup(wb_data.text,'lxml')title = soup.select('div.pho_info > h4')[0].textaddress = soup.select('body > div.wrap.clearfix.con_bg > div.con_l > div.pho_info > p')[0].get('title')price = soup.select('#pricePart > div.day_l > span')[0].textpic = soup.select('#imgMouseCusor')[0].get('src')host_name = soup.select('#floatRightBox > div.js_box.clearfix > div.w_240 > h6 > a')[0].get('title')# host_gender = soup.select('div.member_pic > div')[0].get('class')[0]host_gender = soup.select('#floatRightBox > div.js_box.clearfix > div.w_240 > h6 > span')[0].get('class')[0]def get_gender(gender): if gender == 'member_girl_ico': return '女' if gender == 'member_boy_ico': return '男'get_gender('member_girl_ico')data = { 'title':title, 'address':address, 'price':price, 'pic':pic, 'host_name':host_name, 'host_gender':get_gender(host_gender)}print(data)page_link = []def get_page_link(page_number): for each_number in range(1,page_number): full_url = 'http://bj.xiaozhu.com/search-duanzufang-p{}-0/'.format(each_number) wb_data = requests.get(full_url) soup = BeautifulSoup(wb_data.text,'lxml') for link in soup.select('a.resule_img_a'): page_link.append(link)