返回顶部
首页 > 资讯 > 后端开发 > Python >Python爬虫项目--爬取链家热门城市
  • 660
分享到

Python爬虫项目--爬取链家热门城市

爬虫热门项目 2023-01-30 22:01:08 660人浏览 泡泡鱼

Python 官方文档:入门教程 => 点击学习

摘要

本次实战是利用爬虫爬取链家的新房(声明: 内容仅用于学习交流, 请勿用作商业用途) win8, python 3.7, PyCharm 1. 目标网站分析 通过分析, 找出相关url, 确定请求方式, 是否存在js加密等. 2. 新建

本次实战是利用爬虫爬取链家的新房(声明: 内容仅用于学习交流, 请勿用作商业用途)

win8, python 3.7, PyCharm

1. 目标网站分析

通过分析, 找出相关url, 确定请求方式, 是否存在js加密等.

2. 新建scrapy项目

1. 在cmd命令行窗口中输入以下命令, 创建lianjia项目

scrapy startproject lianjia

2. 在cmd中进入lianjia文件中, 创建Spider文件

cd lianjia
scrapy genspider -t crawl xinfang lianjia.com

这次创建的是CrawlSpider类, 该类适用于批量爬取网页

3. 新建main.py文件, 用于执行scrapy项目文件

到现在, 项目就创建完成了, 下面开始编写项目

3 定义字段

在items.py文件中定义需要的爬取的字段信息

import scrapy
from scrapy.item import Item, Field

class LianjiaItem(scrapy.Item):
    # define the fields for your item here like:
    # name = scrapy.Field()
    city = Field()          #城市名
    name = Field()          #楼盘名
    type = Field()          #物业类型
    status = Field()        #状态
    region = Field()        #所属区域
    street = Field()        #街道
    address = Field()       #具体地址
    area = Field()          #面积
    average_price = Field() #平均价格
    total_price = Field()   #总价
    tags = Field()          #标签

4 爬虫主程序

在xinfang.py文件中编写我们的爬虫主程序

from scrapy.linkextractors import LinkExtractor
from scrapy.spiders import CrawlSpider, Rule
from lianjia.items import LianjiaItem

class XinfangSpider(CrawlSpider):
    name = 'xinfang'
    allowed_domains = ['lianjia.com']
    start_urls = ['https://bj.fang.lianjia.com/']
    #定义爬取的规则, LinkExtractor是用来提取链接(其中,allow指允许的链接格式, restrict_xpaths指链接处于网页结构中的位置), follow为True表示跟进提取出的链接, callback则是调用函数
    rules = (
        Rule(LinkExtractor(allow=r'\.fang.*com/$', restrict_xpaths='//div[@class="footer"]//div[@class="link-list"]/div[2]/dd'), follow=True),
        Rule(LinkExtractor(allow=r'.*loupan/$', restrict_xpaths='//div[@class="xinfang-all"]/div/a'),callback= 'parse_item', follow=True)
    )
    def parse_item(self, response):
        '''请求每页的url''''
        counts = response.xpath('//div[@class="page-box"]/@data-total-count').extract_first()
        pages = int(counts) // 10 + 2
        #由于页数最多为100, 加条件判断
        if pages > 100:
            pages = 101
        for page in range(1, pages):
            url = response.url + "pg" + str(page)
            yield scrapy.Request(url, callback=self.parse_detail, dont_filter=False)

    def parse_detail(self, response):
        '''解析网页内容'''
        item = LianjiaItem()
        item["title"] = response.xpath('//div[@class="resblock-have-find"]/span[3]/text()').extract_first()[1:]
        infos = response.xpath('//ul[@class="resblock-list-wrapper"]/li')
        for info in infos:
            item["city"] = info.xpath('div/div[1]/a/text()').extract_first()
            item["type"] = info.xpath('div/div[1]/span[1]/text()').extract_first()
            item["status"] = info.xpath('div/div[1]/span[2]/text()').extract_first()
            item["region"] = info.xpath('div/div[2]/span[1]/text()').extract_first()
            item["street"] = info.xpath('div/div[2]/span[2]/text()').extract_first()
            item["address"] = info.xpath('div/div[2]/a/text()').extract_first().replace(",", "")
            item["area"] = info.xpath('div/div[@class="resblock-area"]/span/text()').extract_first()
            item["average_price"] = "".join(info.xpath('div//div[@class="main-price"]//text()').extract()).replace(" ", "")
            item["total_price"] = info.xpath('div//div[@class="second"]/text()').extract_first()
            item["tags"] = ";".join(info.xpath('div//div[@class="resblock-tag"]//text()').extract()).replace(" ","").replace("\n", "")
            yield item

5 保存到Mysql数据库

在pipelines.py文件中编辑如下代码

import pymysql
class Lianjiapipeline(object):
    def __init__(self):
        #创建数据库连接对象
        self.db = pymysql.connect(
            host = "localhost",
            user = "root",
            passWord = "1234",
            port = 3306,
            db = "lianjia",
            charset = "utf8"
        )
        self.cursor = self.db.cursor()
    def process_item(self, item, spider):
        #存储到数据库中
        sql = "INSERT INTO xinfang(city, name, type, status, region, street, address, area, average_price, total_price, tags) VALUES (%s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s)"
        data = (item["city"], item["name"], item["type"], item["status"], item["region"], item["street"], item["address"], item["area"], item["average_price"], item["total_price"], item["tags"])
        try:
            self.cursor.execute(sql, data)
            self.db.commit()
        except:
            self.db.rollback()
        finally:
            return item

6 反反爬措施

由于是批量性爬取, 有必要采取些反反爬措施, 我这里采用的是免费的IP代理. 在middlewares.py中编辑如下代码:

from scrapy import signals
import logging
import requests
class ProxyMiddleware(object):
    def __init__(self, proxy):
        self.logger = logging.getLogger(__name__)
        self.proxy = proxy
    @claSSMethod
    def from_crawler(cls, crawler):
        '''获取随机代理的api接口'''
        settings = crawler.settings
        return cls(
            proxy=settings.get('RANDOM_PROXY')
        )
    def get_random_proxy(self):
     '''获取随机代理'''
        try:
            response = requests.get(self.proxy)
            if response.status_code == 200:
                proxy = response.text
                return proxy
        except:
            return False
    def process_request(self, request, spider):
     '''使用随机生成的代理请求'''
        proxy = self.get_random_proxy()
        if proxy:
            url = 'Http://' + str(proxy)
            self.logger.debug('本次使用代理'+ proxy)
            request.meta['proxy'] = url

7  配置settings文件

import random
RANDOM_PROXY = "http://localhost:6686/random"
BOT_NAME = 'lianjia'
SPIDER_MODULES = ['lianjia.spiders']
NEWSPIDER_MODULE = 'lianjia.spiders'
ROBOTSTXT_OBEY = False
DOWNLOAD_DELAY = random.random()*2
COOKIES_ENABLED = False
DEFAULT_REQUEST_HEADERS = {
  'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
  'Accept-Language': 'en',
}
DOWNLOADER_MIDDLEWARES = {
   'lianjia.middlewares.ProxyMiddleware': 543
}
ITEM_PIPELINES = {
   'lianjia.pipelines.LianjiaPipeline': 300,
}

8 执行项目文件

在mian.py中执行如下命令

from scrapy import cmdline
cmdline.execute('scrapy crawl xinfang'.split())

scrapy项目即可开始执行, 最后爬取到1万4千多条数据.

--结束END--

本文标题: Python爬虫项目--爬取链家热门城市

本文链接: https://lsjlt.com/news/180154.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • Python爬虫项目--爬取链家热门城市
    本次实战是利用爬虫爬取链家的新房(声明: 内容仅用于学习交流, 请勿用作商业用途) win8, python 3.7, pycharm 1. 目标网站分析 通过分析, 找出相关url, 确定请求方式, 是否存在js加密等. 2. 新建...
    99+
    2023-01-30
    爬虫 热门 项目
  • Python趣味爬虫之爬取爱奇艺热门电影
    目录一、首先我们要找到目标二、F12查看网页源代码三、进行代码实现,获取想要资源。四、查看现象一、首先我们要找到目标 找到目标先分析一下网页很幸运这个只有一个网页,不需要翻页。 二...
    99+
    2024-04-02
  • Python爬虫项目--爬取猫眼电影To
     本次抓取猫眼电影Top100榜所用到的知识点: 1. python requests库 2. 正则表达式 3. csv模块 4. 多进程 正文 目标站点分析 通过对目标站点的分析, 来确定网页结构, 进一步确定具体的抓取方式. 1. 浏...
    99+
    2023-01-30
    爬虫 猫眼 项目
  • Python爬虫爬取各大热门短视频平台视频
    1、开发工具 Python3.9 requests库 其他一些Python内置库 pycharm 2、第三方库 安装第三方库 pip install requests 3、实现思路 利用tkinter库实例化一个GUI界面,包含提示框...
    99+
    2023-09-10
    python 爬虫
  • python爬虫怎么爬取微博热搜
    这篇文章主要介绍python爬虫怎么爬取微博热搜,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!python有哪些常用库python常用的库:1.requesuts;2.scrapy;3.pillow;4.twiste...
    99+
    2023-06-14
  • python爬虫实战项目之爬取pixiv图片
    自从接触python以后就想着爬pixiv,之前因为梯子有点问题就一直搁置,最近换了个梯子就迫不及待试了下。 爬虫无非request获取html页面然后用正则表达式或者beautif...
    99+
    2024-04-02
  • Python爬虫项目--爬取自如网房源信
    本次爬取自如网房源信息所用到的知识点: 1. requests get请求 2. lxml解析html 3. Xpath 4. MongoDB存储 正文 1.分析目标站点 1. url: http://hz.ziroom.com/z/nl...
    99+
    2023-01-30
    爬虫 自如 房源
  • Python爬虫项目--爬取某宝男装信息
    本次爬取用到的知识点有: 1. selenium 2. pymysql 3  pyquery 正文 1. 分析目标网站 1. 打开某宝首页, 输入"男装"后点击"搜索", 则跳转到"男装"的搜索界面. 2. 空白处"右击"再点击"检查"审...
    99+
    2023-01-30
    爬虫 男装 项目
  • Python爬虫之爬取哔哩哔哩热门视频排行榜
    目录一、bs4解析二、xpath解析三、xpath解析(二值化处理后展示图片)四、分析过程一、bs4解析 import requests from bs4 import Beau...
    99+
    2024-04-02
  • Python爬虫示例:爬取 13 个旅游城市,看看大家放假了都爱去哪玩
    距上次假期端午结束已经47天过去了。。。依然还是没有假期,想出去好多地方玩啊。你们是不是也在期待着假期呀,不过夏天也热,下次的假期大概就是中秋国庆了,那会儿还算是比较凉爽。心血来潮,就想爬一下大家假期最爱去哪玩,作为一个专业合格的程序员,我...
    99+
    2023-06-02
  • python爬虫项目(scrapy-re
      爬取目标:房天下全国租房信息网站(起始url:http://zu.fang.com/cities.aspx)   爬取内容:城市;名字;出租方式;价格;户型;面积;地址;交通   反反爬措施:设置随机user-agent、设置请求延...
    99+
    2023-01-30
    爬虫 项目 python
  • Python怎么爬取城市租房信息
    这篇文章主要介绍了Python怎么爬取城市租房信息的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇Python怎么爬取城市租房信息文章都会有所收获,下面我们一起来看看吧。思路:先单线程爬虫,测试可以成功爬取之后再...
    99+
    2023-06-30
  • 利用python爬取城市公交站点
    目录页面分析爬虫数据清洗Excel PQ 数据清洗python数据清洗QGIS坐标纠偏导入csv文件坐标纠偏总结利用python爬取城市公交站点 页面分析 https://guiya...
    99+
    2024-04-02
  • Python爬虫入门教程——爬取自己的博
    互联网时代里,网络爬虫是一种高效地信息采集利器,可以快速准确地获取网上的各种数据资源。本文使用Python库requests、Beautiful Soup爬取CSDN博客的相关信息,利用txt文件转存。 基础知识: 网络爬虫是一种高效地信...
    99+
    2023-01-30
    自己的 爬虫 入门教程
  • python实战之Scrapy框架爬虫爬取微博热搜
    前言:大概一年前写的,前段时间跑了下,发现还能用,就分享出来了供大家学习,代码的很多细节不太记得了,也尽力做了优化。 因为毕竟是微博,反爬技术手段还是很周全的,怎么绕过反爬的话要在这...
    99+
    2024-04-02
  • 【Python爬虫实战】1.爬取A股上市公司年报链接并存入Excel
     1.项目分析  数据来源:巨潮资讯 项目需求:按照股票代码,公司名称,年报全称,年份,下载链接等要素写入excel表 使用语言:python 第三方库:requests, re , time等 成品展示:  2. 快速上手 废话就...
    99+
    2023-09-04
    python 爬虫 开发语言 金融 数据分析
  • python爬虫实战之爬取京东商城实例教程
    前言 本文主要介绍的是利用python爬取京东商城的方法,文中介绍的非常详细,下面话不多说了,来看看详细的介绍吧。 主要工具 scrapy BeautifulSoup requests ...
    99+
    2022-06-04
    爬虫 实例教程 实战
  • python爬虫入门实战之爬取网页图片
    本篇文章给大家带来了关于Python的相关知识,其中主要整理了爬取网页图片的相关问题,要想高效的获取数据,爬虫是非常好用的,而用python做爬虫也十分简单方便,下面通过一个简单的小爬虫程序来看一看写爬虫的基本过程,下面一起来看一下,希望对...
    99+
    2022-07-11
    python
  • python爬虫scrapy项目详解(关
    python爬虫scrapy项目(一)   爬取目标:腾讯招聘网站(起始url:https://hr.tencent.com/position.phpkeywords=&tid=0&start)   爬取内容:职位;职位类...
    99+
    2023-01-30
    爬虫 详解 项目
  • Python爬虫之爬取我爱我家二手房数据
    目录一、问题说明二、解决方法三、完整代码四、数据展示一、问题说明 首先,运行下述代码,复现问题: # -*-coding:utf-8-*- import re import r...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作