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层');
    
获取一个房子信息失败
获取一个房子信息失败
相关推荐
放飞自我的Coder27 分钟前
【python ROUGE BLEU jiaba.cut NLP常用的指标计算】
python·自然语言处理·bleu·rouge·jieba分词
正义的彬彬侠1 小时前
【scikit-learn 1.2版本后】sklearn.datasets中load_boston报错 使用 fetch_openml 函数来加载波士顿房价
python·机器学习·sklearn
张小生1801 小时前
PyCharm中 argparse 库 的使用方法
python·pycharm
秃头佛爷1 小时前
Python使用PDF相关组件案例详解
python
Dxy12393102161 小时前
python下载pdf
数据库·python·pdf
叶知安1 小时前
如何用pycharm连接sagemath?
ide·python·pycharm
weixin_432702261 小时前
代码随想录算法训练营第五十五天|图论理论基础
数据结构·python·算法·深度优先·图论
菜鸟清风1 小时前
ChromeDriver下载地址
python
deephub2 小时前
Tokenformer:基于参数标记化的高效可扩展Transformer架构
人工智能·python·深度学习·架构·transformer
Open-AI2 小时前
Python如何判断一个数是几位数
python