链家资源爬取

实现逻辑

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

上代码

#一个非常常用的爬虫库
#模拟浏览器,向服务器获取页面
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()

你可能感兴趣的:(爬虫)