首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >口香糖和DomCrawler

口香糖和DomCrawler
EN

Stack Overflow用户
提问于 2016-11-05 12:49:02
回答 1查看 989关注 0票数 0

我正在使用口香糖和DomCrawler从网页上刮取数据,除了一个问题外,一切都运行良好。它把奇怪的字符插入到我收集的数据中。以下是一个例子:

代码语言:javascript
复制
    [2]=>
array(4) {
  ["cell_lines"]=>
  string(4) "A549"
  ["cancer"]=>
  string(4) "Lung"
  ["ic50"]=>
  string(7) ">40 ┬ÁM"
  ["pmid"]=>
  string(8) "10380632"
}
[3]=>
array(4) {
  ["cell_lines"]=>
  string(16) "B16 melanoma 4A5"
  ["cancer"]=>
  string(4) "Skin"
  ["ic50"]=>
  string(7) ">40 ┬ÁM"
  ["pmid"]=>
  string(8) "10380632"
}
[4]=>
array(4) {
  ["cell_lines"]=>
  string(9) "TGBC11TKB"
  ["cancer"]=>
  string(7) "Stomach"
  ["ic50"]=>
  string(7) ">40 ┬ÁM"
  ["pmid"]=>
  string(8) "10380632"
}

>40 ┬ÁM

应该存在的值是>40 µM

但这不仅仅是希腊字母,还有另一个例子:

代码语言:javascript
复制
  ["properties"]=>
array(6) {
["logp"]=>
string(5) "á2.85"
["vdw_volume"]=>
string(8) " 239.67"
["polar_surface_area"]=>
string(7) " 75.99"
["refractivity"]=>
string(8) " 363.43"
["mass"]=>
string(9) " 284.068"
["formula"]=>
string(10) " C16H12O5"

据我所见,在这些数值之前只有 间隔。因为某种原因,它将一切都转化为┬á。如果我用utf8_decode($crawler->text())包装所有东西

这是我得到的:

“=>”数组(6){ "logp"=> string(5)“?”2.85“"vdw_volume"=> string(7)”"á239.67“"polar_surface_area"=> string(6) "á75.99”"refractivity"=> string(7) "á363.43“”质量“=> string(8) "á284.068”公式“=> string(9)”"áC16H12O5“

所以所有的变化就是我得到的是á而不是┬Á

我尝试过像这样创建Crawler实例:

代码语言:javascript
复制
$crawler = new Crawler('','http://crdd.osdd.net/raghava/npact/');
$crawler->addHTMLContent($raw, 'UTF-8');

这没什么改变。我尝试将这个标题添加到文件的顶部:

代码语言:javascript
复制
header('Content-Type: text/html; charset=utf8;');

它没有效果。

下面是我如何打开口香糖客户端:

代码语言:javascript
复制
$client = new Client(array(
'base_uri' => 'http://crdd.osdd.net/'

));

$response =$client->请求(‘GET’,'raghava/npact/brws_alp.php?b=A');

https://gist.github.com/pschultz/6554265#file-forcecharsetplugin-php

我试着安装了ForceChartSet插件,我在这里找到了这个插件:

并以如下方式实施:

代码语言:javascript
复制
// create http client instance
$client = new Client(array(
    'base_uri' => 'http://crdd.osdd.net'
));

$plugin = new ForceCharsetPlugin();
$plugin->setForcedCharset('utf8');
// Guzzle only
$client->addSubscriber($plugin);

我得到了一个错误:

致命错误:在C:\wamp64\www\spider\osdd\vendor\guzzlehttp\psr7\src\functions.php:62堆栈跟踪中,带有消息'URI‘的未命名异常'InvalidArgumentException’必须是字符串或UriInterface: 0 C:\wamp64\www\spider\osdd\vendor\guzzlehttp\guzzle\src\Client.php(142):GuzzleHttp\Psr7\uri_for(Object(ForceCharsetPlugin)) 1个C:\wamp64\www\spider\osdd\vendor\guzzlehttp\guzzle\src\Client.php(115): GuzzleHttp\Client->buildUri(Object(ForceCharsetPlugin),阵列) 2个C:\wamp64\www\spider\osdd\vendor\guzzlehttp\guzzle\src\Client.php(129): GuzzleHttp\Client->requestAsync('addSubscriber',对象(ForceCharsetPlugin)、数组 3个C:\wamp64\www\spider\osdd\vendor\guzzlehttp\guzzle\src\Client.php(87): GuzzleHttp\Client->请求(‘addSubscriber’,Object(ForceCharsetPlugin),Array) 4 C:\wamp64\www\spider\osdd\osdd_data.php(185):GuzzleHttp\Client->_call(‘addSubscriber’,Array) 5 C:\wamp64\www\spider\osdd\osdd_data.php(185):C:\wamp64\www\spider\osdd\osdd_data.php 在C:\wamp64\www\spider\osdd\vendor\guzzlehttp\psr7\src\functions.php上抛出6 {main} 第62项

有人知道这里发生了什么事吗?为什么Does /DomCrawler会把事情变成这些奇怪的角色呢?

顺便说一句:这是我的composer.json文件,我正在自动修改它,以包含组件:

代码语言:javascript
复制
{
"require": {
  "symfony/dom-crawler": "~3.0",
  "symfony/css-selector": "~3.0",
  "guzzlehttp/guzzle": "~6.2.2",
  "fabpot/goutte": "*",
  "symfony/process": "*",
  "symfony/var-dump": "*"
  }
}

我想知道ForceCharsetPlugin不起作用的原因是否是因为我包含了一些它使用的组件的旧版本。我还没有完全弄清楚版本是如何工作的,我不知道*通配符是做什么的。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-11-06 22:34:45

对不起,我发现只有在通过CLI运行脚本时才会出现此问题。当我在浏览器中打开它时,编码很好:https://i.gyazo.com/f488c8a3cbe25cae5c1b368b992b1c53.png

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40438437

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档