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层');
    
获取一个房子信息失败
获取一个房子信息失败
相关推荐
郭庆汝4 小时前
pytorch、torchvision与python版本对应关系
人工智能·pytorch·python
思则变7 小时前
[Pytest] [Part 2]增加 log功能
开发语言·python·pytest
漫谈网络8 小时前
WebSocket 在前后端的完整使用流程
javascript·python·websocket
try2find9 小时前
安装llama-cpp-python踩坑记
开发语言·python·llama
博观而约取10 小时前
Django ORM 1. 创建模型(Model)
数据库·python·django
精灵vector12 小时前
构建专家级SQL Agent交互
python·aigc·ai编程
Zonda要好好学习12 小时前
Python入门Day2
开发语言·python
Vertira12 小时前
pdf 合并 python实现(已解决)
前端·python·pdf
太凉12 小时前
Python之 sorted() 函数的基本语法
python
项目題供诗12 小时前
黑马python(二十四)
开发语言·python