'''使用面向对象的方式,搭建项目框架'''import requests
import openpyxlfrombs4 import BeautifulSoup
import pymysqlclassLianJiaSpider():
mydb= pymysql.connect("localhost", "root", "511924", "summerperiod", charset='utf8')
mycursor=mydb.cursor()
#初始化
def __init__(self):
self.url='https://bj.lianjia.com/chengjiao/pg{0}/'#初始化请求的url
#将其伪装成浏览器,对付反爬的
self.headers={'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.81 Safari/537.36 SE 2.X MetaSr 1.0'}
#发送请求的方法
def send_request(self,url):
resp=requests.get(url,headers=self.headers)if resp.status_code==200:returnresp
#解析html获取有用的数据
def parse_content(self,resp):
html=resp.text
bs=BeautifulSoup(html,'html.parser')#第一个参数是要解析的内容,第二个参数是解析器
#查找自己想要的内容
ul=bs.find('ul',class_='listContent')
#在劜中获取所有的li
li_list=ul.find_all('li')
#遍历
lst=[]for item inli_list:
title=item.find('div',class_='title').text#标题
house_info=item.find('div',class_='houseInfo').text#房屋描述
deal_date=item.find('div',class_='dealData')#成交的日期
total_price=item.find('div',class_='totalPrice').text#总价
position_info=item.find('div',class_='positionInfo').text#楼层信息
unit_price=item.find('div',class_='unitPrice').text#单价
span_list= item.find_all('span') # 获取挂牌价和成交周期
agent_name= item.find('a', class_='agent_name').text # 销售
lst.append(title,house_info,deal_date,total_price,position_info,unit_price,span_list[0].text,span_list[1].text,agent_name)
#数据解析完毕,需要存储到数据库
self.write_mysal(lst)
def write_mysql(self,lst):
sql_cixian= "INSERT INTO food values (%s,%s,%s,%s,%s,%s,%s)"self.mycursor.executemany(sql_cixian, lst)
self.mydb.commit()
self.mydb.close()
#写入数据库
def write_mysal(self):
pass
#启动爬虫程序
def start(self):for i in range(1,2):
full_url=self.url.format(i)
resp=self.send_request(full_url)#发送请求ifresp:
self.parse_content(resp)#传入数据if __name__=='__main__':
#创建类的对象
lianjia=LianJiaSpider()
lianjia.start()