链家资源爬取

    xiaoxiao2023-11-15  194

    实现逻辑

    链家爬取是一个简单的爬虫逻辑 获取页面----->解析页面--------->数据的永久保存 现在我们直接上代码

    上代码

    #一个非常常用的爬虫库 #模拟浏览器,向服务器获取页面 import requests #解析库 from lxml import html import csv import time #新版lxml就是有点麻烦,之前直接可以调用etree方法 etree = html.etree #获取页面 def getPage(url,header): # 请求页面 res = requests.get(url,headers=header) # 使用utf-8编码 res.encoding='utf-8' # 获取页面 html = res.text # 如果是非结构化数据,就用这content属性 # p = res.content # 请求请求状态码,请求成功就是200,请求失败是404 print(res.status_code) return html #解析页面 def parsPage(html): parsHTML = etree.HTML(html) # 提取出来的xpath内容列表 rl = parsHTML.xpath(r'//div[@class="resblock-list-container clearfix"]/ul[@class="resblock-list-wrapper"]/li[@class="resblock-list post_ulog_exposure_scroll has-results"]') # 遍历rl, for i in rl: # 小区名 name = i.xpath('./a/@title')[0] # 小区地址 addr = i.xpath('./div[@class="resblock-desc-wrapper"]/div[@class="resblock-location"]/a/text()')[0] # 小区单位房价 price = i.xpath('./div[@class="resblock-desc-wrapper"]/div[@class="resblock-price"]/div[@class="main-price"]/span[@class="number"]/text()')[0] # print是在屏幕显示price这一变量的值 print(price) # 把三个值放入l的元组里面,元组是一个数据类型 l = (name,addr,price) # 调用函数 saveData(l) #数据的保存 def saveData(l): # csv就是我们常用的exel格式 with open ('GZL.csv','a',newline='') as f: c = csv.writer(f) print(l) try: c.writerow(l) except: print('存在异常',l) #主函数 def main(): # 请求头 header ={'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.121 Safari/537.36'} # 基础连接地址 baseurl = 'https://gz.fang.lianjia.com/loupan/nhs1/' # 页数 page = int(input('请输入爬取的页数')) # if就是如果 if page == 1: html = getPage(baseurl,header) parsPage(html) if page > 1: html = getPage(baseurl,header) parsPage(html) for i in range(2,page+1): url = baseurl + 'pg%d'%i html = getPage(url,header) parsPage(html) main()
    最新回复(0)