58.com qiyi
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的更多相关文章
- NXP恩智浦P87C51/52/54/58/591芯片解密单片机破解多少钱?
NXP恩智浦P87C51/52/54/58/591芯片解密单片机破解 芯片解密型号: P87C51x2.P87C52x2.P87C54x2.P87C58x2.P87C591 单片机解密 #####[ ...
- android模仿58筛选下拉框(PopupWindow实现)
前言:前几天用58同城APP找房子的时候,看到筛选下拉框蛮不错的,然后也有很多朋友需要实现这个功能,于是从网上下载了一个demo,在他的基础上进行修改,花了几个小时对他的代码进行修改,重构,封装.把一 ...
- Ubuntu 14.04 编译安装 boost 1.58
简介 Boost is a set of libraries for the C++ programming language that provide support for tasks and s ...
- [MISSAJJ原创] UITableViewCell移动及翻转出现的3D动画效果[58同城cell移动效果]
2015-11-20 很喜欢在安静的状态, 听着音乐,敲着键盘, 和代码们浓情对话, 每一份代码的积累, 都让自己觉得很充实快乐!Y(^_^)Y. 看到58同城app的cell有动画移动出现的特效,很 ...
- 用Python写爬虫爬取58同城二手交易数据
爬了14W数据,存入Mongodb,用Charts库展示统计结果,这里展示一个示意 模块1 获取分类url列表 from bs4 import BeautifulSoup import request ...
- 58同城高性能移动Push推送平台架构演进之路
本文详细讲述58同城高性能移动Push推送平台架构演进的三个阶段,并介绍了什么是移动Push推送,为什么需要,原理和方案对比:移动Push推送第一阶段(单平台)架构如何设计:移动Push推送典型性能问 ...
- 使用JavaScript在项目前台开发的58种常用小技巧
oncontextmenu="return false" :禁止右键 onselectstart="return false" : 禁止选取 onpaste = ...
- ubuntu14.04 boost动态库找不到 libboost_system.so.1.58.0
error while loading shared libraries: : cannot open shared object file: No such file or directory == ...
- 重新想象 Windows 8 Store Apps (58) - 微软账号
[源码下载] 重新想象 Windows 8 Store Apps (58) - 微软账号 作者:webabcd 介绍重新想象 Windows 8 Store Apps 之 微软账号 获取微软账号的用户 ...
随机推荐
- css样式控制鼠标滑过显示
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...
- GAT2.0使用文档(组合接口测试)
3.2接口用例场景组件 在此之前,大家应该都已经开发完成了一个最简单的接口测试用例,但是之前的接口用例的期望结果是固定值,不能动态的去做对比,有很大局限性.下面开始介绍怎样通过场景组件来动态对测试结果 ...
- 升级PHP
wget http://down.wdlinux.cn/in/php_up53.shsh php_up53.sh
- Servlet 实现上传文件以及同时,写入xml格式文件和上传
package com.isoftstone.eply.servlet; import java.io.BufferedReader; import java.io.BufferedWriter; i ...
- Window 常用文件
*.msm ntwdblib.dll是一款用于PHP连接MSSQL2005或2008的驱动文件,如果连接BDE的时候出现“cannot load an idapi service liabray fi ...
- mac下使用brew安装ffmpeg支持x265
使用brew install ffmpeg 安装ffmpeg默认是没有支持x265的, 使用brew info ffmpeg 获取安装选项帮助, 使用brew reinstall ffmpeg --w ...
- 如何设置WebViewer的参数栏显示状态
当为用户提供数据过滤功能时,需要为报表添加参数,而很多应用场景下,在初次展现报表时就为报表会展现全部的数据,然后再通过参数供用户选择,从而实现数据过滤,而一旦为参数设置默认值,参数面板就会自动隐藏.导 ...
- Linux下安装国际版QQ (转)
原文链接:http://www.linuxidc.com/Linux/2016-09/134923.htm 说明:一开始,我在Ubuntu 16.04下安装的QQ版本是Wineqq2013SP6-20 ...
- Yii 检查输入的数据是否已经存在
只需要在对应的Model文件中的rules方法里面加入 array('username', 'unique', 'message'=>'{attribute}已存在'),//username是需 ...
- 通过一行代码学习javascript
[].forEach.call($$("*"), function (a){ a.style.outline = "1px solid #"+(~~(Math. ...