爬虫数据保存到mysql数据库

由于内容简单,此处只做代码分享。

需求数据如图:

最终效果:

完整代码:

# https://ty.fang.lianjia.com/loupan/
import requests
from lxml import etree
import  pymysql
class LJSpider():
    def __init__(self):
        self.num=int(input(页数:))
        self.url=https://ty.fang.lianjia.com/loupan/pg%d/
        self.headers={User-Agent:Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.102 Safari/537.36 Edg/98.0.1108.62,}
        self.connect = pymysql.connect(host=127.0.0.1, user=root, password= , database=rxkc, charset=utf8)
        self.cursor = self.connect.cursor()
        l = drop table if exists lianjia;
        self.cursor.execute(l)
        sql = create table lianjia
                      (id int(2) primary key auto_increment,
                      title varchar(255),
                      address varchar(255),
                      shape varchar(255),
                      area varchar(255),
                      aprice varchar(255),
                      tprice varchar(255),
                      detail varchar(255)
                      );
        self.cursor.execute(sql)

    def send_request(self,url):
        res=requests.get(url=url,headers=self.headers)
        res.encoding=utf-8
        if res.status_code==200:
            self.parse_html(res)
    def parse_html(self,res):
        lst=[]
        html=res.text
        tree=etree.HTML(html)
        li_list=tree.xpath(/html/body/div[3]/ul[2]/li)
        for li in li_list:
            title=li.xpath(./div/div[1]/a/text())[0]
            address=li.xpath(./div/div[2]//text())
            address=address[1]+ +address[5]+ +address[-2]
            shape=li.xpath(./div/a/span//text())
            if shape:
                try:
                    shape=shape[0]+shape[1]+shape[2]
                except :
                    try:
                        shape = shape[0] + shape[1]
                    except:
                        shape = shape[0]
            else:
                shape=此处暂无介绍
            area=li.xpath(div/div[3]/span/text())
            if area:
                area=area[0]
            else:
                area=此处暂无介绍
            price=li.xpath(./div/div[6]//text())
            aprice=price[2]+price[4]
            try:
                tprice = li.xpath(div/div[6]/div[2]/text())[0]
            except:
                tprice=此处暂无介绍
            detail=str(li.xpath(div/div[5]/span/text()))
            detail=detail[2:-2]
            detail=detail.replace(", ", )
            lst.append((title,address,shape,area,aprice,tprice,detail))
        self.save(lst)
    def save(self,lst):
        ql=insert into lianjia (title,address,shape,area,aprice,tprice,detail) values (%s,%s,%s,%s,%s,%s,%s)
        self.cursor.executemany(ql,lst)
        self.connect.commit()
        print(f{self.cursor.rowcount}条记录插入成功)
    def start(self):
        for i in range(1,self.num+1):
            url=self.url%i
            self.send_request(url)

if __name__ == __main__:
    lj=LJSpider()
    lj.start()
经验分享 程序员 微信小程序 职场和发展