分布式网络爬虫实例——获取静态数据和动态数据

本文通过实例演示如何使用PyHusky分布式爬虫框架抓取静态和动态数据。在静态数据部分,展示了如何针对房地产网站抓取房价、面积等信息。对于动态数据,利用selenium来处理动态渲染的内容,以股吧为例,成功实现分布式爬取。
摘要由CSDN通过智能技术生成

前言

刚刚介绍完基于PyHusky的分布式爬虫原理及实现,让我们具备了设计分布式网络爬虫方便地调动计算资源来实现高效率的数据获取能力。可以说,有了前面的基础,已经能够解决互联网上的绝大部分网站的数据获取问题。下面我将以正常模式爬取某地产网站上相关的新房、二手房和租房信息;然后使用selenium来抓取动态数据来分别介绍两种类型网站的分布式网络爬虫的实现:

实例

由于前面已经设计好了实现分布式爬虫的框架,它们存放在hcrawl目录:

这里写图片描述

我们只需要针对不同网站格式编写对应的数据特征抓取函数以及设计好爬虫的初始链接和链接规则即可。

静态数据

以地产为例,如下图所示房子的信息,可以以正常的模式请求网页,返回的pagesource中即包含着我们需要的数据特征,例如价格、面积、类型、朝向、年代等等:
这里写图片描述

#house.py
import sys
import re
import json
import bs4
import time
from hcrawl import crawler_dist as cd
from hcrawl import crawler_config
import bindings.frontend.env as env
#根据不同的网友格式,使用BeautifulSoup提取所需的数据特征。下面为二手房和租房对应的提取函数:
def house_info(url,html):
    try:
        soup = bs4.BeautifulSoup(html, "lxml")
        title = soup.find('dl',{
  'class':'fl roominfor'}).text
        price = soup.find('div',{
  'class':'roombase-price'}).find_all('span')[0].text
        room_and_hall = soup.find('div',{
  'class':'roombase-price'}).find_all('span')[1].text
        area = soup.find('div',{
  'class':'roombase-price'}).find_all('span')[2].text
        infor_list = soup.find('dl',{
  'class':'hbase_txt'}).find_all('p',{
  'class':'cell'})
        house_info = []
        for li in infor_list:
            try:
                house_info.append((li.find_all('span')[0].text,li.find_all('span')[1].text))
            except:
                pass
        comment_item = soup.find('dl',{
  'class':'comment-item clearfix'}).text
        T = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())
        return json.dumps({
  "type":"zydc_esf", "title":title, "price":price,"url":url,'room_and_hall':room_and_hall,'area':area,'house_info':house_info,'comment_item':comment_item,'time':T})
    except:
        if html==None:
            return json.dumps({
  "type":"request_fail", "url":url})
        sys.stderr
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值