using AnfleCrawler.Common;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks; namespace AnfleCrawler.DataAnalyzer
{
internal class Qy58 : AnalyzerBase
{
public override void Init(PageCrawler crawler)
{
base.Init(crawler); var url = new Uri("http://qy.58.com/caohejing/pn1/?PGTID=14177711280840.45006677554920316&ClickID=1");
//http://qy.58.com/19583455460359/?PGTID=14177659184690.5166369006238447&ClickID=4
crawler.PushUrl(url, );
} protected override void AnalyzeInternal(PageLandEntity current)
{
var lander = Crawler.Lander;
var pHandler = CreateContentHandler(current);
switch (current.Depth)
{
case :
{
pHandler.AjaxBlocks.Add(HACK);
var dom = lander.GetDocument(pHandler);
DoPerPaging(current, dom.DocumentNode, ".next"); foreach (var node in QueryNodes(dom.DocumentNode, ".compList a"))
{
var url = GetHref(node, current.Url);
Crawler.PushUrl(url, );
}
}
break;
case :
{
var dom = lander.GetDocument(pHandler);
var attr = new AttributeFiller(); attr.Append("Name:{0}", QueryTexts(dom.DocumentNode, ".compT").First()); foreach (var th in QueryNodes(dom.DocumentNode, ".basicMsg table th").Skip())
{
string sTh = th.InnerText, sTd;
switch (sTh)
{
case "联系电话":
case "邮箱":
var client = new System.Net.WebClient();
var iNode = QueryNode(th.NextSibling, "img");
byte[] imgRaw = client.DownloadData(GetHref(iNode, current.Url, attrName: "src"));
var img = new System.Drawing.Bitmap(new System.IO.MemoryStream(imgRaw));
sTd = OCR(img);
break;
case "公司地址":
sTd = QueryTexts(th.NextSibling, "span").First();
break;
default:
sTd = th.NextSibling.InnerText.HtmlTrim();
break;
}
attr.Append("{0}:{1}", sTh, sTd);
} var bo = new CompanyEntity();
bo.City = "上海";
bo.GroupName = "漕河泾企业";
bo.PageUrl = current.Url.OriginalString;
bo.UpdateDate = DateTime.Now;
attr.FillEntity(bo, new Dictionary<string, string>()
{
{"公司性质", "Nature"},
{"公司行业", "Industry"},
{"公司规模", "Scale"},
{"联系人", "ContactPerson"},
{"企业网址", "Website"}, {"联系电话", "Tel"},
{"邮箱", "Email"},
{"公司地址", "Address"},
});
Repository.SaveCompany(bo);
Crawler.OutWrite("保存企业 {0}", bo.Name);
}
break;
}
}
}
}

58.com qiyi的更多相关文章

  1. NXP恩智浦P87C51/52/54/58/591芯片解密单片机破解多少钱?

    NXP恩智浦P87C51/52/54/58/591芯片解密单片机破解 芯片解密型号: P87C51x2.P87C52x2.P87C54x2.P87C58x2.P87C591  单片机解密 #####[ ...

  2. android模仿58筛选下拉框(PopupWindow实现)

    前言:前几天用58同城APP找房子的时候,看到筛选下拉框蛮不错的,然后也有很多朋友需要实现这个功能,于是从网上下载了一个demo,在他的基础上进行修改,花了几个小时对他的代码进行修改,重构,封装.把一 ...

  3. Ubuntu 14.04 编译安装 boost 1.58

    简介 Boost is a set of libraries for the C++ programming language that provide support for tasks and s ...

  4. [MISSAJJ原创] UITableViewCell移动及翻转出现的3D动画效果[58同城cell移动效果]

    2015-11-20 很喜欢在安静的状态, 听着音乐,敲着键盘, 和代码们浓情对话, 每一份代码的积累, 都让自己觉得很充实快乐!Y(^_^)Y. 看到58同城app的cell有动画移动出现的特效,很 ...

  5. 用Python写爬虫爬取58同城二手交易数据

    爬了14W数据,存入Mongodb,用Charts库展示统计结果,这里展示一个示意 模块1 获取分类url列表 from bs4 import BeautifulSoup import request ...

  6. 58同城高性能移动Push推送平台架构演进之路

    本文详细讲述58同城高性能移动Push推送平台架构演进的三个阶段,并介绍了什么是移动Push推送,为什么需要,原理和方案对比:移动Push推送第一阶段(单平台)架构如何设计:移动Push推送典型性能问 ...

  7. 使用JavaScript在项目前台开发的58种常用小技巧

    oncontextmenu="return false" :禁止右键 onselectstart="return false" : 禁止选取 onpaste = ...

  8. ubuntu14.04 boost动态库找不到 libboost_system.so.1.58.0

    error while loading shared libraries: : cannot open shared object file: No such file or directory == ...

  9. 重新想象 Windows 8 Store Apps (58) - 微软账号

    [源码下载] 重新想象 Windows 8 Store Apps (58) - 微软账号 作者:webabcd 介绍重新想象 Windows 8 Store Apps 之 微软账号 获取微软账号的用户 ...

随机推荐

  1. PostgreSQL同步复制搭建

    摘要: PostgreSQL同步复制搭建 一.初始化master节点 1. 安装PostgreSQL 2. 初始化db initdb -D /data/pg940_data 二.配置master节点 ...

  2. Linux之常用快捷键

    tab:自动补齐命令或者路径 ESC+u:将字符小写变大写 ctrl+s:在终端中冻结stdin ctrl+q:在终端中恢复stdin ctrl+a:光标移动到行首 ctrl+e:光标移动到行尾 ct ...

  3. [已解决] MyBatis 中bind用法

    JAVA: TC_ENTR_FLOW selectFlowForUpdate(String ENTR_ID); XML: <select id="selectFlowForUpdate ...

  4. 如何在Linux中查看所有正在运行的进程

    如何在Linux中查看所有正在运行的进程 FROM:http://os.51cto.com/art/201101/244090.htm 进程是一个其中运行着一个或多个线程的地址空间和这些线程所需要的系 ...

  5. Python进程、线程、协程

    进程和线程的解释 进程(process)和线程(thread)是操作系统的基本概念,计算机的核心是CPU,它承担了所有的计算任务: 单个CPU一次只能运行一个任务,代表单个CPU总是运行一个进程,其他 ...

  6. 【jQuery】window.onload 和 $(document).ready() 的区别

    ... 在Stack Overflow上看到了这个问题,自己翻译了过来. The onload event is a standard event in the DOM, while the read ...

  7. Nginx的负载均衡 - 整体架构

    Nginx的负载均衡 - 整体架构 Nginx版本:1.9.1 我的博客:http://blog.csdn.net/zhangskd Nginx目前提供的负载均衡模块: ngx_http_upstre ...

  8. Working with Binary Data in Python

    http://www.devdungeon.com/content/working-binary-data-python

  9. 解决一道leetcode算法题的曲折过程及引发的思考

    写在前面 本题实际解题过程是 从 40秒 --> 24秒 -->1.5秒 --> 715ms --> 320ms --> 48ms --> 36ms --> ...

  10. Compounding绑定属性

    声明:原创作品,转载时请注明文章来自SAP师太技术博客( 博/客/园www.cnblogs.com):www.cnblogs.com/jiangzhengjun,并以超链接形式标明文章原始出处,否则将 ...