爬虫
import time
import pymysql
import requests
from bs4 import BeautifulSoup
def get_page ( url) :
response = requests. get( url)
soup = BeautifulSoup( response. text, '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
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( )
cursor. execute( sql)
conn. commit( )
values = "'{}'," * 5 + "'{}'"
svalues = values. format ( 1 , 2 , 3 , 4 , 5 , 6 )
svalues
sql = "{}" . format ( svalues)
sql
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' )
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层');
获取一个房子信息失败
获取一个房子信息失败