我正在使用口香糖和DomCrawler从网页上刮取数据,除了一个问题外,一切都运行良好。它把奇怪的字符插入到我收集的数据中。以下是一个例子:
[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。
但这不仅仅是希腊字母,还有另一个例子:
["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实例:
$crawler = new Crawler('','http://crdd.osdd.net/raghava/npact/');
$crawler->addHTMLContent($raw, 'UTF-8');这没什么改变。我尝试将这个标题添加到文件的顶部:
header('Content-Type: text/html; charset=utf8;');它没有效果。
下面是我如何打开口香糖客户端:
$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插件,我在这里找到了这个插件:
并以如下方式实施:
// 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文件,我正在自动修改它,以包含组件:
{
"require": {
"symfony/dom-crawler": "~3.0",
"symfony/css-selector": "~3.0",
"guzzlehttp/guzzle": "~6.2.2",
"fabpot/goutte": "*",
"symfony/process": "*",
"symfony/var-dump": "*"
}
}我想知道ForceCharsetPlugin不起作用的原因是否是因为我包含了一些它使用的组件的旧版本。我还没有完全弄清楚版本是如何工作的,我不知道*通配符是做什么的。
发布于 2016-11-06 22:34:45
对不起,我发现只有在通过CLI运行脚本时才会出现此问题。当我在浏览器中打开它时,编码很好:https://i.gyazo.com/f488c8a3cbe25cae5c1b368b992b1c53.png
https://stackoverflow.com/questions/40438437
复制相似问题