python爬虫

爬虫

python 复制代码
# python库
# requests 用来获取页面内容
# BeautifulSoup 用来提取页面中的元素

# 1.获取页面中的每一个链接
# 2.进入每个链接获取对应元素

# pip install requests
# pip install bs4
python 复制代码
import time
import pymysql
import requests
from bs4 import BeautifulSoup
python 复制代码
#获取url下的页面内容,返回soup对象
def get_page(url):
    response = requests.get(url)
    soup = BeautifulSoup(response.text,'lxml')#提供一种lxml的解析格式
    return soup

# 封装成函数,作用是获取列表页下面的所有租房页面的链接,返回一个链接列表
def get_links(link_url):
    soup = get_page(link_url)
    links_div = soup.find_all('div',class_ = "content__list--item")
    links = [div.a.get('href') for div in links_div] #使用列表推导式构建一个新的列表
    return links

#shift + M:框向下合并

#获取房屋详细信息
def get_house_info(house_url):
    soup = get_page(house_url)
    div = soup.find('div',class_ = "content__aside--title")
    if div != None:
        price = soup.find('div',class_ = "content__aside--title").span.text#价格
        unit = soup.find('div',class_ = "content__aside--title").text[5:8]#单价
        info_div = soup.find('div',class_ = "content__article__info")
        house_info = info_div.ul.find_all('li', class_ = 'fl oneline')
        area = house_info[1].text[3:]#面积
        direction = house_info[2].text[3:]#朝向
        floor = house_info[7].text[3:]#楼层
        layout_div = soup.find('ul',class_ = "content__aside__list")
        layout_li = layout_div.find_all('li')
        layout = layout_li[2].text[5:].strip() #户型
        info = {
        '价格':price,
        '单价':unit,
        '面积':area,
        '朝向':direction,
        '楼层':floor,
        '户型':layout
        }
        return info
    else:
        return 'None'

def get_db(setting):
    return pymysql.connect(**setting)

def insert(conn, house):
    vaules = "'{}',"*5 + "'{}'"
    sql_values = vaules.format(house['价格'],house['单价'],house['面积'],
                               house['朝向'],house['楼层'],house['户型'])
    sql = """
        insert into house_info(price,unit,area,direction,floor,layout)
        values({});
    """.format(sql_values)
    #打印插入语句
    print(sql)
    #创建游标
    cursor = conn.cursor()
    #执行sql插入
    cursor.execute(sql)
    #提交sql插入语句
    conn.commit()
python 复制代码
values = "'{}',"*5+"'{}'"
svalues = values.format(1,2,3,4,5,6)
svalues
sql = "{}".format(svalues)
sql
python 复制代码
DATABASE = {
    'host':'127.0.0.1',
    'database':'lianjia',
    'user':'root',
    'password':'123qwe'
}
conn = get_db(DATABASE)
links = get_links('https://bj.lianjia.com/zufang/')
for link in links:  
    time.sleep(2)#设置两秒读取一个页面
    link = 'https://bj.lianjia.com' + link
    house = get_house_info(link)
    if house != 'None':
        print('获取一个房子信息成功')
        print('网址为:%s'%(link))
        print(house, end='\r')#\r代表回车符
        insert(conn, house)
        pass
    else:
        print('获取一个房子信息失败')
        pass
        
获取一个房子信息成功
网址为:https://bj.lianjia.com/zufang/BJ1889968478874501120.html
{'价格': '6800', '单价': '元/月', '面积': '83.00㎡', '朝向': '南 北', '楼层': '高楼层/22层', '户型': '南/北 高楼层/22层'}
        insert into house_info(price,unit,area,direction,floor,layout)
        values('6800','元/月','83.00㎡','南 北','高楼层/22层','南/北 高楼层/22层');
    
获取一个房子信息失败
获取一个房子信息成功
网址为:https://bj.lianjia.com/zufang/BJ1892882486606692352.html
{'价格': '5500', '单价': '元/月', '面积': '76.00㎡', '朝向': '南 北', '楼层': '低楼层/28层', '户型': '南/北 低楼层/28层'}
        insert into house_info(price,unit,area,direction,floor,layout)
        values('5500','元/月','76.00㎡','南 北','低楼层/28层','南/北 低楼层/28层');
    
获取一个房子信息失败
获取一个房子信息成功
网址为:https://bj.lianjia.com/zufang/BJ1776912742876184576.html
{'价格': '5388', '单价': '元/月', '面积': '95.00㎡', '朝向': '南 北', '楼层': '低楼层/24层', '户型': '南/北 低楼层/24层'}
        insert into house_info(price,unit,area,direction,floor,layout)
        values('5388','元/月','95.00㎡','南 北','低楼层/24层','南/北 低楼层/24层');
    
获取一个房子信息失败
获取一个房子信息成功
网址为:https://bj.lianjia.com/zufang/BJ1890316563584647168.html
{'价格': '6200', '单价': '元/月', '面积': '63.00㎡', '朝向': '南', '楼层': '高楼层/4层', '户型': '南 高楼层/4层'}
        insert into house_info(price,unit,area,direction,floor,layout)
        values('6200','元/月','63.00㎡','南','高楼层/4层','南 高楼层/4层');
    
获取一个房子信息失败
获取一个房子信息成功
网址为:https://bj.lianjia.com/zufang/BJ1734931428581310464.html
{'价格': '4223', '单价': '元/月', '面积': '89.31㎡', '朝向': '南 北', '楼层': '低楼层/7层', '户型': '南/北 低楼层/7层'}
        insert into house_info(price,unit,area,direction,floor,layout)
        values('4223','元/月','89.31㎡','南 北','低楼层/7层','南/北 低楼层/7层');
    
获取一个房子信息失败
获取一个房子信息成功
网址为:https://bj.lianjia.com/zufang/BJ1889174856377827328.html
{'价格': '3800', '单价': '元/月', '面积': '95.75㎡', '朝向': '南', '楼层': '低楼层/5层', '户型': '南 低楼层/5层'}
        insert into house_info(price,unit,area,direction,floor,layout)
        values('3800','元/月','95.75㎡','南','低楼层/5层','南 低楼层/5层');
    
获取一个房子信息失败
获取一个房子信息失败
获取一个房子信息成功
网址为:https://bj.lianjia.com/zufang/BJ1892484578489139200.html
{'价格': '4100', '单价': '元/月', '面积': '92.00㎡', '朝向': '南 北', '楼层': '中楼层/7层', '户型': '南/北 中楼层/7层'}
        insert into house_info(price,unit,area,direction,floor,layout)
        values('4100','元/月','92.00㎡','南 北','中楼层/7层','南/北 中楼层/7层');
    
获取一个房子信息失败
获取一个房子信息失败
获取一个房子信息成功
网址为:https://bj.lianjia.com/zufang/BJ1892808790579871744.html
{'价格': '5000', '单价': '元/月', '面积': '86.51㎡', '朝向': '南 北', '楼层': '中楼层/14层', '户型': '南/北 中楼层/14层'}
        insert into house_info(price,unit,area,direction,floor,layout)
        values('5000','元/月','86.51㎡','南 北','中楼层/14层','南/北 中楼层/14层');
    
获取一个房子信息失败
获取一个房子信息成功
网址为:https://bj.lianjia.com/zufang/BJ1773955754940694528.html
{'价格': '4120', '单价': '元/月', '面积': '39.63㎡', '朝向': '南', '楼层': '低楼层/5层', '户型': '南 低楼层/5层'}
        insert into house_info(price,unit,area,direction,floor,layout)
        values('4120','元/月','39.63㎡','南','低楼层/5层','南 低楼层/5层');
    
获取一个房子信息失败
获取一个房子信息成功
网址为:https://bj.lianjia.com/zufang/BJ1893328913262706688.html
{'价格': '6000', '单价': '元/月', '面积': '48.90㎡', '朝向': '北', '楼层': '高楼层/21层', '户型': '北 高楼层/21层'}
        insert into house_info(price,unit,area,direction,floor,layout)
        values('6000','元/月','48.90㎡','北','高楼层/21层','北 高楼层/21层');
    
获取一个房子信息失败
获取一个房子信息成功
网址为:https://bj.lianjia.com/zufang/BJ1890995106006171648.html
{'价格': '6500', '单价': '元/月', '面积': '75.08㎡', '朝向': '南 北', '楼层': '高楼层/18层', '户型': '南/北 高楼层/18层'}
        insert into house_info(price,unit,area,direction,floor,layout)
        values('6500','元/月','75.08㎡','南 北','高楼层/18层','南/北 高楼层/18层');
    
获取一个房子信息失败
获取一个房子信息成功
网址为:https://bj.lianjia.com/zufang/BJ1861392335263236096.html
{'价格': '2850', '单价': '元/月', '面积': '103.54㎡', '朝向': '南 北', '楼层': '低楼层/12层', '户型': '南/北 低楼层/12层'}
        insert into house_info(price,unit,area,direction,floor,layout)
        values('2850','元/月','103.54㎡','南 北','低楼层/12层','南/北 低楼层/12层');
    
获取一个房子信息失败
获取一个房子信息失败
获取一个房子信息成功
网址为:https://bj.lianjia.com/zufang/BJ1893939431702790144.html
{'价格': '3550', '单价': '元/月', '面积': '42.42㎡', '朝向': '南', '楼层': '中楼层/5层', '户型': '南 中楼层/5层'}
        insert into house_info(price,unit,area,direction,floor,layout)
        values('3550','元/月','42.42㎡','南','中楼层/5层','南 中楼层/5层');
    
获取一个房子信息失败
获取一个房子信息失败
相关推荐
LZXCyrus13 分钟前
【杂记】vLLM如何指定GPU单卡/多卡离线推理
人工智能·经验分享·python·深度学习·语言模型·llm·vllm
Enougme16 分钟前
Appium常用的使用方法(一)
python·appium
懷淰メ21 分钟前
PyQt飞机大战游戏(附下载地址)
开发语言·python·qt·游戏·pyqt·游戏开发·pyqt5
hummhumm35 分钟前
第 22 章 - Go语言 测试与基准测试
java·大数据·开发语言·前端·python·golang·log4j
hummhumm1 小时前
第 28 章 - Go语言 Web 开发入门
java·开发语言·前端·python·sql·golang·前端框架
每天吃饭的羊1 小时前
python里的数据结构
开发语言·python
卡卡_R-Python1 小时前
UCI Heart Disease Data Set—— UCI 心脏病数据集介绍
python·plotly·django·virtualenv·pygame
饮长安千年月2 小时前
浅谈就如何解出Reverse-迷宫题之老鼠走迷宫的一些思考
python·网络安全·逆向·ctf
好看资源平台2 小时前
网络爬虫——爬虫项目案例
爬虫·python
豌豆花下猫2 小时前
Python 潮流周刊#78:async/await 是糟糕的设计(摘要)
后端·python·ai