• Python爬取链家二手房信息


    1、爬取链家二手房信息,存入数据库(MySQL)数据来源:链家

    2、数据库表结构

    3、代码

    '''使用面向对象的方式,搭建项目框架'''
    import requests
    from bs4 import BeautifulSoup
    import pymysql
    class LianJiaSpider():
        mydb = pymysql.connect("localhost", "root", "123456", "pythontest", 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; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.163 Safari/537.36'}
    
        #发送请求的方法
        def send_request(self,url):
            resp=requests.get(url,headers=self.headers)
            if resp.status_code==200:
                return resp
        #解析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 in li_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_mysql(lst)
    
        def write_mysql(self,lst):
            sql_cixian = "INSERT INTO ershoufang values (0,%s,%s,%s,%s,%s,%s,%s,%s,%s)"
            self.mycursor.executemany(sql_cixian, lst)
            self.mydb.commit()
            print('添加成功')
            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)#发送请求
                if resp:
                    self.parse_content(resp)#传入数据
    
    
    
    if __name__=='__main__':
        #创建类的对象
        lianjia=LianJiaSpider()
        lianjia.start()
    lianjia.py

    4、结果

  • 相关阅读:
    Tasklet机制
    linux 内核与用户空间通信之netlink使用方法
    inline总结与思考
    PF_NETLINK应用实例NETLINK_KOBJECT_UEVENT具体实现--udev实现原理
    2410下DMA驱动源码分析
    [转]数据库建立索引的一般依据
    [转]性能调优的步骤
    [原] JT SQL Server 性能调优札记之二
    [转]SQL Server 2000执行计划成本(5/5)
    [转]SQL Server 2000执行计划成本(3/5)
  • 原文地址:https://www.cnblogs.com/MoooJL/p/13458530.html
Copyright © 2020-2023  润新知