爬虫-获取数据bs4

news/2024/7/19 10:18:21 标签: 爬虫, python
  1. 安装lxml

    pip3 install lxml
    
  2. 用法

python">	import requests
	from bs4 import BeautifulSoup
	url ='xxxx'
	res = requests.get(url).text
	soup = BeautifulSoup(res,'lxml')
	
	##---------------------bs4选择器使用方法--------------------------
	#1. 根据a标签查找,类型是list,元素是bs4对象
	print(soup.find_all('a')) 
	#2. 返回所有div 和 a 标签
	print(soup.find_all(['div','a']))
    #3. 根据标签属性定位
    print(soup.find_all(attrs={"clsaa":"xxx"}))
	#4. 根据标签和属性定位
	print(soup.find_all('div',attrs={"clsaa":"xxx"}))
	
	##---------------------css选择器使用方法--------------------------
	#1. 根据标签
	print(soup.select('h1'))
	#2. 根据css属性 查找class=xx的数据
	print(soup.select('.xxx'))
	#3.根据id属性  查找id=xx的数据
	print(soup.select('#xx))
	#4. 层级选择器 id=xx 下的 class=yy的数据
	print(soup.select('#xx .yy'))
	#5 属性选择器
	print(soup.select(div[id="xx"]))
	
	##---------------------获取文本信息和属性方法----------------------
	#5. 获取标签的文本信息 text
	print(soup.find_all('div',attrs={"clsaa":"xxx"})[0].text)
    #5-2. 获取标签的文本信息 string
    print(soup.find_all('div',attrs={"clsaa":"xxx"})[0].string)
    #5-3. 获取标签的文本信息 text()
	print(soup.find_all('div',attrs={"clsaa":"xxx"})[0].get_text())
	#5-4. 获取标签的文本信息 getText()
	print(soup.find_all('div',attrs={"clsaa":"xxx"})[0].getText())
	#获取标签属性 get()
	print(soup.find_all('div')[0].get('class'))
	
  1. 实例
    python">#用xpath做一个简单的爬虫,爬取链家网里的租房信息获取标题,
    位置,房屋的格局(三室一厅),关注人数,单价,总价
    import requests
    from bs4 import BeautifulSoup
    
    def get_req(url):
    
        headers = {
            "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.100 Safari/537.36"
        }
        res = requests.get(url,headers=headers)
        return res.text
    
    def get_all(data):
        house_data=[]
        soup = BeautifulSoup(data,'lxml')
    
        for item in soup.find_all(attrs={"class":"info clear"}):
            house_msg = {}
    
            title = item.find('div',attrs={"class":"title"}).find('a').text
            position_info = '-'.join([value.text for value in item.find_all('div',attrs={"class":"positionInfo"})[0].find_all('a')])
            house_icon =  item.find('div',attrs={"class":"houseInfo"}).text.split('|')[0]
            total_price = item.find_all('div',attrs={"class":"totalPrice totalPrice2"})[0].find('span').text
            star_icon = item.find('div',attrs={"class":"followInfo"}).text
            unit_price = item.find('div',attrs={"class":"unitPrice"}).find('span').text
            house_msg['标题'] = title
            house_msg['位置'] = position_info
            house_msg['房屋的格局'] = house_icon
            house_msg['关注人数'] = star_icon
            house_msg['总价'] = total_price
            house_msg['单价'] = unit_price
            house_data.append(house_msg)
            print(house_msg)
        return house_data
    
    if __name__ == '__main__':
        url = 'https://sh.lianjia.com/ershoufang/pudong/pg2/'
        all_data = get_req(url)
        get_all(all_data)
    

http://www.niftyadmin.cn/n/5122586.html

相关文章

静电模型PIC方法的Matlab仿真设计

任务要求: 采用PIC模拟方法的静电模型来模拟多环形电子注在圆柱系统中的运动轨迹。模拟电子枪阴极表面发射电子注,电子在静态场的作用下运动直至稳定的运动过程。其中 系统长:0.01m 系统半径:0.005m 入射的每个宏电子电流&#x…

kafka3.X集群安装(不使用zookeeper)

参考: 【kafka专栏】不用zookeeper怎么安装kafka集群-最新kafka3.0版本 一、kafka集群实例角色规划 在本专栏的之前的一篇文章《kafka3种zk的替代方案》已经为大家介绍过在kafka3.0种已经可以将zookeeper去掉。 上图中黑色代表broker(消息代理服务)&…

【LeetCode】739 每日温度

给定一个整数数组 temperatures ,表示每天的温度,返回一个数组 answer ,其中 answer[i] 是指对于第 i 天,下一个更高温度出现在几天后。如果气温在这之后都不会升高,请在该位置用 0 来代替。 示例 1: 输入: temperat…

全面解析优化企业Microsoft 365网络的加速方案

您的员工是否有因为Microsoft 365频繁掉线、卡顿、无法登录而向IT部门抱怨过? 很多时候企业会以为是自身网络带宽不足才导致访问失败,但是在采取增加带宽的方案后,办公文档协同打开仍旧很慢,文件分享依旧需要等待较长的时间&…

【Java集合类面试二十六】、介绍一下ArrayList的数据结构?

文章底部有个人公众号:热爱技术的小郑。主要分享开发知识、学习资料、毕业设计指导等。有兴趣的可以关注一下。为何分享? 踩过的坑没必要让别人在再踩,自己复盘也能加深记忆。利己利人、所谓双赢。 面试官:介绍一下ArrayList的数据…

XTU-OJ 1178-Rectangle

题目描述 给你两个平行于坐标轴的矩形,请判断两者是不是相交(面积有重合的部分)? 输入 第一行是一个整数K,表示样例数。 每个样例占两行,每行是4个整数,表示一个矩形的对角线点的坐标&#xff0…

嵌入式系统设计师考试笔记之操作系统基础复习笔记一

目录 1、嵌入式软件基础 (1)嵌入式软件的特点: (2)嵌入式软件分类: (3)无操作系统的嵌入式软件的两种实现方式: (4)有操作系统的三大优点&am…

【.net/.net core】发送邮件方法

具体实现逻辑为申请一个授权的发送邮箱&#xff0c;利用该邮箱从代码层面实现邮箱中的邮件发送功能 #region 发送邮件/// <summary>/// 发送邮件方法/// </summary>/// <param name"Subject">邮件标题</param>/// <param name"Body…