爬虫-获取数据bs4

  1. 安装lxml

    bash 复制代码
    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)
相关推荐
轩轩的学习之路几秒前
claudecode安装+第三方模型,无root
linux·人工智能·python
键盘上的猫头鹰2 分钟前
Jupyter notebook安装与启动
python·数据分析
闲人编程8 分钟前
Agent的安全边界:如何防止AI失控(对齐问题)
网络·python·ai·agent·权限·智能体·cai
Generalzy9 分钟前
为什么 Go 的注释,能控制编译器?
java·python·golang
西洼工作室12 分钟前
缓存工具类封装:内存与Redis无缝切换
redis·python·缓存·全栈
m0_6091604917 分钟前
Go语言Beego框架如何用_Go语言Beego框架入门教程【高效】
jvm·数据库·python
阿正的梦工坊6 小时前
深入理解 PyTorch 中的 unsqueeze 操作
人工智能·pytorch·python
FreakStudio7 小时前
硬件版【Cursor】?aily blockly IDE尝鲜封神,实战硬伤尽显
python·单片机·嵌入式·大学生·面向对象·并行计算·电子diy·电子计算机
测试员周周9 小时前
【Appium 系列】第06节-页面对象实现 — LoginPage 实战
开发语言·前端·人工智能·python·功能测试·appium·测试用例
2301_783848659 小时前
优化文本分类中堆叠模型的网格搜索性能:避免训练卡顿的实战指南
jvm·数据库·python