#主要用的python库:安装必要的库requests:用来获取页面信息; BeautifulSoup:用来获取页面结构的详细信息
#先获取链接,再到一个列表,进入标签,然后到class。。。。。就可以了(省略)
#安装
import requests
from bs4 import BeautifulSoup
url = "https://hz.lianjia.com/zufang/"
responce=requests.get(url)#获取到页面信息200,页面信息存储在text中
#查看页面信息存储位置,response.text
responce.text
soup = BeautifulSoup(responce.text,'lxml')#解析使用lxml格式的文本存储,使文本结构化了
links_div=('div',class_="pic-panel")##class加下划线是因为class是python里的关键字,此class非彼class
#从列表框里生成另一个列表推导式,利用列表生成式
links =[div.a.get('herf') for div in links_div]
print(links,len(links))##30个链接,访问这些链接可以得到详细的租房信息
#links_div[1].a.get('herf')##仅仅提取了这个链接就够了
##上述代码封装成函数,名字为get_links,作用为获取下边所有租房页面的链接,返回一个链接列表##封装:获取url页面下的内容,返回soup对象
def get_page(url):responce = request.get(url)soup = BeautifulSoup(responce.text, 'lxml')return soupdef get_links(link_url):#responce = requests.get(url) # 获取到页面信息200,页面信息存储在text中。已封装成上述函数#soup = BeautifulSoup(responce.text, 'lxml') # 解析使用lxml格式的文本存储,使文本结构化了。已封装成上述函数#调用上述替代上边注释掉的两行的函数soup=get_page(link_url)links_div = soup.find_all('div',class_='pic-panel')links=[links_div.a.get('herf') for div in links_div]return linkslinks_url="https://hz.lianjia.com/zufang/"get_links(links_url)def get_huose_info(huose_url)huose_url = "https://hz.lianjia.com/zufang/103102641328.html"#responce = request.get(hour_url)#soup = BeautifulSoup(responce.text,'lxml')#调用函数soup=get_page(huose_url)price=soup.find('span',class_="total").text##直接把价格4500获取出来unit=soup.find('span',class_="unit").textunit.str()#str函数字符转换工具house_info=soup.find_all('p')#('p',class='if')area=huose_info[0].text[3:]#切片工具切片掉标题:面积:layout=huose_info[1].text[5:]floor=huose_info[2].text[3:]direction = house_info[3].text[5:]##地铁没有class,说明在获取huose_info时class时多余的train=huose[4].text[3:]#构建一个字典info={'面积':area,'价格':price}
封装数据库
DATABASE= {'host':127.0.0.1,'database':'Examination','user':'root','password':'yuping','charset':utf8mb4}
def get_db(setting):return MySQLdb.connect(**settings)
def insert(house_info):values = "'{}'"*11+"'{}'"sql_values = values.format(huose['价格'],huose['面积'],huose['价格'])sql = '''insert into 'huose'('price','unit','area')values({},)'''.format(sql_values)cursor = db.cursor()cursor.execute(sql)db.commit()
huose = get_huose_info('https://hz.lianjia.com/zufang/103102641328.html')
db = get_db(DATABASE)
insert(db,huose)
for link in links:time.sleep(2)##为了防止访问时间太长加上时间限制print("获取一个房子信息时间成功")huose = get_huose_info(link)insert(db,huose)