2つのサイトから取得した画像のサイズをそろえたいです。
どうすればいいですか。
また、2つ目のサイトhttps://www.hmv.co.jp/news/top/1_100/から取得した文と取得サイト情報の文の間に大きな空白部分ができてしまいます。これを無くすことはできませんか。
よろしくお願いします。
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>音楽CD・DVD情報サイト</title>
<style>
div {
float: left;
background: #ffffff;
width: 600px;
padding: 20px;
text-align: left;
border: 0px solid #cccccc;
margin: 20px 50px 50px 50px;
color: #ff6600;
}
p.data_image img {
width: 300px;
height: auto;
}
body {
background: #f0f8ff;
background-image: url("./img-logo-nmnl.gif");
}
</style>
</head>
<body>
<h1>音楽CD・DVD情報サイト</h1>
<?php
require_once("phpQuery-onefile.php");
require_once("pathChanger.php");
echo '<div>';
$url = "https://tower.jp/article/campaign";
$doc = phpQuery::newDocumentFileHTML($url, $charset = 'SJIS');
echo '取得サイト:'.$doc['title']->text().'<br>';
$data = $doc['.inMdl-atclHeadlineDefCell'];
foreach($data as $row){
echo pq($row)->find('.title')->text().'<br>';
$string = pq($row)->find('.image')->find('img').'<br>';
$string = utf8_encode($string);
$new_str = str_replace('%E2%80%BE', '~', $string);
echo $new_str;
}
echo '</div>';
?>
<?php
require_once("phpQuery-onefile.php");
require_once("pathChanger.php");
echo '<div>';
$url = "https://www.hmv.co.jp/news/top/1_100/";
$doc = phpQuery::newDocumentFileHTML($url, $charset = 'SJIS');
echo '取得サイト:'.$doc['title']->text().'<br>';
$data = $doc['.list'];
foreach($data as $row){
echo pq($row)->find('.title')->text().'<br>';
echo pq($row)->find('.thumbnailBlock')->find('img').'<br>';
}
echo '</div>';
?>
</body>
</html>
CSSの部分に,
img {
object-fit: cover;
width: 200px;
height: 150px;
}
を追加しています.
コードを以下のように変更してください.
確認お願いします.
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>音楽CD・DVD情報サイト</title>
<style>
div {
float: left;
background: #ffffff;
width: 600px;
padding: 20px;
text-align: left;
border: 0px solid #cccccc;
margin: 20px 50px 50px 50px;
color: #ff6600;
}
img {
object-fit: cover;
width: 200px;
height: 150px;
}
body {
background: #f0f8ff;
background-image: url("./img-logo-nmnl.gif");
}
</style>
</head>
<body>
<h1>音楽CD・DVD情報サイト</h1>
<?php
require_once("phpQuery-onefile.php");
require_once("pathChanger.php");
echo '<div>';
$url = "https://tower.jp/article/campaign";
$doc = phpQuery::newDocumentFileHTML($url, $charset = 'SJIS');
echo '取得サイト:'.$doc['title']->text().'<br>';
$data = $doc['.inMdl-atclHeadlineDefCell'];
foreach($data as $row){
echo pq($row)->find('.title')->text().'<br>';
$string = pq($row)->find('.image')->find('img').'<br>';
$string = utf8_encode($string);
$new_str = str_replace('%E2%80%BE', '~', $string);
echo $new_str;
}
echo '</div>';
?>
<?php
require_once("phpQuery-onefile.php");
require_once("pathChanger.php");
echo '<div>';
$url = "https://www.hmv.co.jp/news/top/1_100/";
$doc = phpQuery::newDocumentFileHTML($url, $charset = 'SJIS');
echo '取得サイト:'.$doc['title']->text().'<br>';
$data = $doc['.list'];
foreach($data as $row){
echo pq($row)->find('.title')->text().'<br>';
echo pq($row)->find('.thumbnailBlock')->find('img').'<br>';
}
echo '</div>';
?>
</body>
</html>


画像のサイズをそろえることができました
しかし、取得サイト情報の文と2つ目のサイトhttps://www.hmv.co.jp/news/top/1_100/から取得した文の間の大きな空白部分がまだ残ってしまいます。これを無くすことはできませんか。


listクラスが他の部分にも存在していたので,中身が空のものが出力されていました.
固有のクラスを指定してみるとうまくいきます.
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>音楽CD・DVD情報サイト</title>
<style>
div {
float: left;
background: #ffffff;
width: 600px;
padding: 20px;
text-align: left;
border: 0px solid #cccccc;
margin: 20px 50px 50px 50px;
color: #ff6600;
}
img {
object-fit: cover;
width: 200px;
height: 150px;
}
body {
background: #f0f8ff;
background-image: url("./img-logo-nmnl.gif");
}
</style>
</head>
<body>
<h1>音楽CD・DVD情報サイト</h1>
<?php
require_once("phpQuery-onefile.php");
require_once("pathChanger.php");
echo '<div>';
$url = "https://tower.jp/article/campaign";
$doc = phpQuery::newDocumentFileHTML($url, $charset = 'SJIS');
echo '取得サイト:'.$doc['title']->text().'<br>';
$data = $doc['.inMdl-atclHeadlineDefCell'];
foreach($data as $row){
echo pq($row)->find('.title')->text().'<br>';
$string = pq($row)->find('.image')->find('img').'<br>';
$string = utf8_encode($string);
$new_str = str_replace('%E2%80%BE', '~', $string);
echo $new_str;
}
echo '</div>';
require_once("phpQuery-onefile.php");
require_once("pathChanger.php");
echo '<div>';
$url = "https://www.hmv.co.jp/news/top/1_100/";
$doc = phpQuery::newDocumentFileHTML($url, $charset = 'SJIS');
echo '取得サイト:'.$doc['title']->text().'<br>';
$data = $doc['.newsBlockList ']->find('li');
foreach($data as $row){
echo pq($row)->find('.title')->text().'<br>';
echo pq($row)->find('.thumbnailBlock')->find('img').'<br>';
}
echo '</div>';
?>
</body>
</html>


本当にありがとうございます。


エラーが出ます。
どの部分に問題があるのかわかりません。
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Web情報システム</title>
<style>
div {
float: left;
background: #ffffff;
width: 300px;
padding: 20px;
text-align: left;
border: 1px solid #cccccc;
margin: 15px 5px 10px 4px;
}
body{
background-image:url("./japan.jpg");
}
</style>
</head>
<body>
<h1>Web情報システム</h1>
<?php
require_once("phpQuery-onefile.php");
require_once("pathChanger.php");
$url = "https://weather.yahoo.co.jp/weather/";
$doc = phpQuery::newDocumentFileHTML($url);
$news = $doc[".newsFeed_list"];
echo"<div>";
echo fullpath($news["li"],$url);
echo"</div>";
?>
</body>
</html>
下記のように,
echo fullpath($news["li"],$url);
を変更してみてください.
エラーはなくなると思います.
<?php
require_once("phpQuery-onefile.php");
require_once("pathChanger.php");
$url = "https://weather.yahoo.co.jp/weather/";
$doc = phpQuery::newDocumentFileHTML($url);
$news = $doc[".newsFeed_list"];
echo"<div>";
echo $news;
echo"</div>";
?>




<!DOCUTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Web情報収集システム </title>
<style>
div {
float: left;
background: #ffffff;
width: 500px;
padding: 20px;
text-align: left;
border: 1px solid #cccccc;
margin: 15px 5px 10px 4px;
color: #ff6600;
}
.image-contents img {
min-width: 250px;
height: auto;
}
body {
background: #ffffff;
background-image: url("./images.jpg");
}
</style>
</head>
<body>
<h1>what do kids in Japan want for Santa ?</h1>
<h3>
<?php
require_once("phpQuery-onefile.php");
$url = "https://ranking.rakuten.co.jp/daily/566382/";
$doc = phpQuery::newDocumentFileHTML($url);
echo '(from:'.$doc['title']->text().')'.'<br>';
?>
</h3>
<h1>BOY
<?php
require_once("phpQuery-onefile.php");
$url = "https://ranking.rakuten.co.jp/daily/566382/gender=male/";
$doc = phpQuery::newDocumentFileHTML($url);
?>
</h1>
<?php
echo '<div>';
for($i=0;$i<10;$i++) {echo "<p class='image-contents'>";
echo $doc[".rnkRanking_image > .rnkRanking_imageBox"]->find("a:eq(".$i.")")."<br />";
echo $doc[".rnkRanking_upperbox > .rnkRanking_itemName"]->find("a:eq(".$i.")")."<br />";
echo "<br />";
}
echo '</div>';
?>
<h1>GIRL
<?php
require_once("phpQuery-onefile.php");
$url = "https://ranking.rakuten.co.jp/daily/566382/gender=female/";
$doc = phpQuery::newDocumentFileHTML($url);
?>
</h1>
<?php
echo '<div>';
for($i=0;$i<10;$i++) {echo "<p class='image-contents'>";
echo $doc[".rnkRanking_image > .rnkRanking_imageBox"]->find("a:eq(".$i.")")."<br />";
echo $doc[".rnkRanking_upperbox > .rnkRanking_itemName"]->find("a:eq(".$i.")")."<br />";
echo "<br />";
}
echo '</div>';
?>
</body>
</html>
ブロック名のBOYSとGIRLSをdivの四角の中に入れたいのですがどうすればいいのでしょうか?
<h1>BOY
<?php
require_once("phpQuery-onefile.php");
$url = "https://ranking.rakuten.co.jp/daily/566382/gender=male/";
$doc = phpQuery::newDocumentFileHTML($url);
?>
</h1>
<?php
echo '<div>';
for($i=0;$i<10;$i++) {echo "<p class='image-contents'>";
echo $doc[".rnkRanking_image > .rnkRanking_imageBox"]->find("a:eq(".$i.")")."<br />";
echo $doc[".rnkRanking_upperbox > .rnkRanking_itemName"]->find("a:eq(".$i.")")."<br />";
echo "<br />";
}
echo '</div>';
?>
<h1>GIRL
<?php
require_once("phpQuery-onefile.php");
$url = "https://ranking.rakuten.co.jp/daily/566382/gender=female/";
$doc = phpQuery::newDocumentFileHTML($url);
?>
</h1>
<?php
echo '<div>';
for($i=0;$i<10;$i++) {echo "<p class='image-contents'>";
echo $doc[".rnkRanking_image > .rnkRanking_imageBox"]->find("a:eq(".$i.")")."<br />";
echo $doc[".rnkRanking_upperbox > .rnkRanking_itemName"]->find("a:eq(".$i.")")."<br />";
echo "<br />";
}
echo '</div>';
?>
以下のように変更してみてください.
<?php
require_once("phpQuery-onefile.php");
$url1 = "https://ranking.rakuten.co.jp/daily/566382/gender=male/";
$url2 = "https://ranking.rakuten.co.jp/daily/566382/gender=female/";
$doc1 = phpQuery::newDocumentFileHTML($url1);
$doc2 = phpQuery::newDocumentFileHTML($url2);
echo '<div>';
echo '<h1>BOY'BOYS'</h1>';
for($i=0;$i<10;$i++) {echo "<p class='image-contents'>";
echo $doc1 [".rnkRanking_image > .rnkRanking_imageBox"]->find("a:eq(".$i.")")."<br />";
echo $doc1 [".rnkRanking_upperbox > .rnkRanking_itemName"]->find("a:eq(".$i.")")."<br />";
echo "<br />";
}
echo '</div>';
echo '<div>';
echo '<h1>GIRL</h1>'
for($i=0;$i<10;$i++) {echo "<p class='image-contents'>";
echo $doc2 [".rnkRanking_image > .rnkRanking_imageBox"]->find("a:eq(".$i.")")."<br />";
echo $doc2 [".rnkRanking_upperbox > .rnkRanking_itemName"]->find("a:eq(".$i.")")."<br />";
echo "<br />";
}
echo '</div>';
?>


Parse error: syntax error, unexpected 'for' (T_FOR), expecting ',' or ';' in /home/s256016/public_html/exsi2020/reportnew.php on line 60
と出たのですがFORが認識されていないということでしょうか
解決方法が分かりません。
下記でどうでしょうか?
<?php
require_once("phpQuery-onefile.php");
$url1 = "https://ranking.rakuten.co.jp/daily/566382/gender=male/";
$url2 = "https://ranking.rakuten.co.jp/daily/566382/gender=female/";
$doc1 = phpQuery::newDocumentFileHTML($url1);
$doc2 = phpQuery::newDocumentFileHTML($url2);
echo '<div>';
echo '<h1>BOYS</h1>';
for($i=0;$i<10;$i++) {echo "<p class='image-contents'>";
echo $doc1 [".rnkRanking_image > .rnkRanking_imageBox"]->find("a:eq(".$i.")")."<br />";
echo $doc1 [".rnkRanking_upperbox > .rnkRanking_itemName"]->find("a:eq(".$i.")")."<br />";
echo "<br />";
}
echo '</div>';
echo '<div>';
echo '<h1>GIRL</h1>';
for($i=0;$i<10;$i++) {echo "<p class='image-contents'>";
echo $doc2 [".rnkRanking_image > .rnkRanking_imageBox"]->find("a:eq(".$i.")")."<br />";
echo $doc2 [".rnkRanking_upperbox > .rnkRanking_itemName"]->find("a:eq(".$i.")")."<br />";
echo "<br />";
}
echo '</div>';


先ほど回答したコードの末尾に「?>」が抜けていました.
確認お願いします.
<!DOCUTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Web情報収集システム </title>
<style>
div {
float: left;
background: #ffffff;
width: 500px;
padding: 20px;
text-align: left;
border: 1px solid #cccccc;
margin: 15px 5px 10px 4px;
color: #ff6600;
}
.image-contents img {
min-width: 250px;
height: auto;
}
body {
background: #ffffff;
background-image: url("./images.jpg");
}
</style>
</head>
<body>
<h1>what do kids in Japan want for Santa ?</h1>
<h3>
<?php
require_once("phpQuery-onefile.php");
$url = "https://ranking.rakuten.co.jp/daily/566382/";
$doc = phpQuery::newDocumentFileHTML($url);
echo '(from:'.$doc['title']->text().')'.'<br>';
?>
</h3>
<?php
require_once("phpQuery-onefile.php");
$url1 = "https://ranking.rakuten.co.jp/daily/566382/gender=male/";
$url2 = "https://ranking.rakuten.co.jp/daily/566382/gender=female/";
$doc1 = phpQuery::newDocumentFileHTML($url1);
$doc2 = phpQuery::newDocumentFileHTML($url2);
echo '<div>';
echo '<h1>BOYS</h1>';
for($i=0;$i<10;$i++) {echo "<p class='image-contents'>";
echo $doc1 [".rnkRanking_image > .rnkRanking_imageBox"]->find("a:eq(".$i.")")."<br />";
echo $doc1 [".rnkRanking_upperbox > .rnkRanking_itemName"]->find("a:eq(".$i.")")."<br />";
echo "<br />";
}
echo '</div>';
echo '<div>';
echo '<h1>GIRL</h1>';
for($i=0;$i<10;$i++) {echo "<p class='image-contents'>";
echo $doc2 [".rnkRanking_image > .rnkRanking_imageBox"]->find("a:eq(".$i.")")."<br />";
echo $doc2 [".rnkRanking_upperbox > .rnkRanking_itemName"]->find("a:eq(".$i.")")."<br />";
echo "<br />";
}
echo '</div>';
?>
</body>
</html>


助かりましたありがとうございます。
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Webページ検索システム</title>
<style>
body {
background: #f808080;
}
</style>
</head>
<body>
<h1>Web情報収集システム</h1>
<?php
require_once("phpQuery-onefile.php");
echo "<div>";
$url = "https://www3.nhk.or.jp/news/special/coronavirus/local-tokyo/";
$doc = phpQuery::newDocumentFileHTML($url);
echo'<h2>コロナウイルスの感染者数</h2><br><br>';
echo $doc['.graph__outer graph__outer--infection-viz-tokyo__graph'];
echo $doc['#highcharts-ufb9nj6-0']->find("img:eq");
echo "</div>";
?>
</body>
</html>
としているのですが、グラフが表示されません。どのようにすればいいですか。
http://webdesign.center.wakayama-u.ac.jp:60080/~s256108/exsi2020/report.php
にページがない状態になっています.
最終課題提出のためと,ページを見ながら修正箇所を指摘しようと思うので,
report.phpを作成してください.


reportに直したので再度確認お願いします。
今,斎藤さんが引用しようとしているサイトの画像,映像は
svgという物を使っています.
簡単に確認したのですが,今回授業で扱っているpathChanger.phpとphpQuery-onefile.phpはsvgには対応していないので,
このページを自分のページで再現するには難しいと考えられます.
なので,どうか一度他のページを探してみてください.


<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Webページ検索システム</title>
</head>
<body>
<h1>Web情報収集システム</h1>
<?php
require_once("phpQuery-onefile.php");
echo "<div>";
$url = "https://www.asahi.com/special/coronavirus/tokyo/";
$doc = phpQuery::newDocumentFileHTML($url);
echo'<h2>コロナウイルスの感染者数</h2><br><br>';
$img = $doc['.date_bpx_inner']->find("img:eq");
echo "</div>";
?>
</body>
</html>
文字化けしてしまったので、楠根弘稀さんの質問を参考に$charset = 'SJIS'を書き足しました。すると文字化けは治ったのですが、変更前まで正常に表示されていた画像がすべて絵文字になってしまい、正常に表示されなくなってしまいました。どうすればよいでしょうか。
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>CDセール&キャンペーン情報</title>
<style>
div {
float: left;
background: #ffffff;
width: 300px;
padding: 20px;
text-align: left;
border: 0px solid #cccccc;
margin: 15px 5px 10px 4px;
color: #ff6600;
}
.image-contents img {
min-width: 300px;
height: auto;
}
body {
background: #f0f8ff;
background-image: url("./type-a1.gif");
}
</style>
</head>
<body>
<h1>CDセール&キャンペーン情報</h1>
<?php
require_once("phpQuery-onefile.php");
require_once("pathChanger.php");
echo '<div>';
$url = "https://tower.jp/article/campaign";
$doc = phpQuery::newDocumentFileHTML($url, $charset = 'SJIS');
echo '取得サイト:'.$doc['title']->text().'<br>';
$data = $doc['.topModuleBox'];
foreach($data as $row){
echo pq($row)->find('.dat')->text().'<br>';
echo pq($row)->find('.title')->text().'<br>';
echo pq($row)->find('.image')->find('img').'<br>';
}
echo '</div>';
?>
</body>
</html>
imgのurlの文字コードはおそらくUTF-8なので,変換する必要があります.
しかし,「〜」のところは元に変換できないので,置換も行ってください.
PHPのコードも以下に載せておきますね.
(元々書いてあって,不要になった箇所はコメントアウトしています.)
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>CDセール&キャンペーン情報</title>
<style>
div {
float: left;
background: #ffffff;
width: 300px;
padding: 20px;
text-align: left;
border: 0px solid #cccccc;
margin: 15px 5px 10px 4px;
color: #ff6600;
}
.image-contents img {
min-width: 300px;
height: auto;
}
body {
background: #f0f8ff;
background-image: url("./type-a1.gif");
}
</style>
</head>
<body>
<h1>CDセール&キャンペーン情報</h1>
<?php
require_once("phpQuery-onefile.php");
require_once("pathChanger.php");
echo '<div>';
$url = "https://tower.jp/article/campaign";
$doc = phpQuery::newDocumentFileHTML($url, $charset = 'SJIS');
echo '取得サイト:'.$doc['title']->text().'<br>';
$data = $doc['.topModuleBox'];
foreach($data as $row){
echo pq($row)->find('.dat')->text().'<br>';
echo pq($row)->find('.title')->text().'<br>';
/* 修正1 */
$string = pq($row)->find('.image')->find('img').'<br>';
$string = utf8_encode($string);
$new_str = str_replace('%E2%80%BE', '~', $string);
echo $new_str;
}
echo '</div>';
?>
</body>
</html>


ありがとうございます。


1種類目の文→2種類目の文→画像の繰り返しにしたいのですが、1種類目の文すべて→2種類目の文すべて→画像すべてのようにそれぞれがまとまって表示されてしまいます。どうすればいいですか。
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>CDセール&キャンペーン情報</title>
<style>
div {
float: left;
background: #ffffff;
width: 300px;
padding: 20px;
text-align: left;
border: 0px solid #cccccc;
margin: 15px 5px 10px 4px;
color: #ff6600;
}
.image-contents img {
min-width: 300px;
height: auto;
}
body {
background: #f0f8ff;
background-image: url("./type-a1.gif");
}
</style>
</head>
<body>
<h1>CDセール&キャンペーン情報</h1>
<?php
require_once("phpQuery-onefile.php");
require_once("pathChanger.php");
echo '<div>';
$url = "https://tower.jp/article/campaign";
$doc = phpQuery::newDocumentFileHTML($url, $charset = 'SJIS');
echo '取得サイト:'.$doc['title']->text().'<br>';
$data = $doc['.topModuleBox'];
foreach($data as $row){
echo pq($row)->find('.dat')->text().'<br>';
echo pq($row)->find('.title')->text().'<br>';
echo pq($row)->find('.image')->find('img').'<br>';
}
echo '</div>';
?>
</body>
</html>
まずは,学籍番号と,サイトのurlを教えていただいてもよろしいでしょうか?


学籍番号:60256030
URL:https://tower.jp/article/campaign
よろしくお願いいたします。


他の質問に頂いた返信により、コードを少し変更しました。
現在のコードは以下のようになっています。
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>CDセール&キャンペーン情報</title>
<style>
div {
float: left;
background: #ffffff;
width: 300px;
padding: 20px;
text-align: left;
border: 0px solid #cccccc;
margin: 15px 5px 10px 4px;
color: #ff6600;
}
.image-contents img {
min-width: 300px;
height: auto;
}
body {
background: #f0f8ff;
background-image: url("./type-a1.gif");
}
</style>
</head>
<body>
<h1>CDセール&キャンペーン情報</h1>
<?php
require_once("phpQuery-onefile.php");
require_once("pathChanger.php");
echo '<div>';
$url = "https://tower.jp/article/campaign";
$doc = phpQuery::newDocumentFileHTML($url, $charset = 'SJIS');
echo '取得サイト:'.$doc['title']->text().'<br>';
$data = $doc['.topModuleBox'];
foreach($data as $row){
echo pq($row)->find('.dat')->text().'<br>';
echo pq($row)->find('.title')->text().'<br>';
$string = pq($row)->find('.image')->find('img').'<br>';
$string = utf8_encode($string);
$new_str = str_replace('%E2%80%BE', '~', $string);
echo $new_str;
}
echo '</div>';
?>
</body>
</html>


一度以下のように修正して試してみてください.
--------------------------------
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>CDセール&キャンペーン情報</title>
<style>
div {
float: left;
background: #ffffff;
width: 300px;
padding: 20px;
text-align: left;
border: 0px solid #cccccc;
margin: 15px 5px 10px 4px;
color: #ff6600;
}
.image-contents img {
min-width: 300px;
height: auto;
}
body {
background: #f0f8ff;
background-image: url("./type-a1.gif");
}
</style>
</head>
<body>
<h1>CDセール&キャンペーン情報</h1>
<?php
require_once("phpQuery-onefile.php");
require_once("pathChanger.php");
echo '<div>';
$url = "https://tower.jp/article/campaign";
$doc = phpQuery::newDocumentFileHTML($url, $charset = 'SJIS');
echo '取得サイト:'.$doc['title']->text().'<br>';
$data = $doc['.topModuleBox'];
$title = $data->find('.title');
$image = $data->find('.image');
$combine = array_combine( $title, $image );
echo '<div>';
foreach ( $combine as $t => $i ){
echo pq($t) . ':' . pq($i) . '<br>';
}
echo '</div>';
?>
</body>
</html>


修正したのですが、エラーになってしまいます。


修正したコードは以下の通りです。
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>CDセール&キャンペーン情報</title>
<style>
div {
float: left;
background: #ffffff;
width: 300px;
padding: 20px;
text-align: left;
border: 0px solid #cccccc;
margin: 15px 5px 10px 4px;
color: #ff6600;
}
.image-contents img {
min-width: 300px;
height: auto;
}
body {
background: #f0f8ff;
background-image: url("./type-a1.gif");
}
</style>
</head>
<body>
<h1>CDセール&キャンペーン情報</h1>
<?php
require_once("phpQuery-onefile.php");
require_once("pathChanger.php");
echo '<div>';
$url = "https://tower.jp/article/campaign";
$doc = phpQuery::newDocumentFileHTML($url, $charset = 'SJIS');
echo '取得サイト:'.$doc['title']->text().'<br>';
$data = $doc['.topModuleBox'];
$title = $data->find('.title');
$image = $data->find('.image');
$combine = array_combine( $title, $image );
echo '<div>';
foreach ( $combine as $t => $i ){
echo pq($t) . ':' . pq($i) . '<br>';
}
echo '</div>';
?>
</body>
</html>


参考にしてみてください.
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>CDセール&キャンペーン情報</title>
<style>
div {
float: left;
background: #ffffff;
width: 300px;
padding: 20px;
text-align: left;
border: 0px solid #cccccc;
margin: 15px 5px 10px 4px;
color: #ff6600;
}
.image-contents img {
min-width: 300px;
height: auto;
}
body {
background: #f0f8ff;
background-image: url("./type-a1.gif");
}
</style>
</head>
<body>
<h1>CDセール&キャンペーン情報</h1>
<?php
require_once("phpQuery-onefile.php");
require_once("pathChanger.php");
echo '<div>';
$url = "https://tower.jp/article/campaign";
$doc = phpQuery::newDocumentFileHTML($url, $charset = 'SJIS');
echo '取得サイト:'.$doc['title']->text().'<br>';
$data = $doc['.inMdl-atclHeadlineDefCell'];
foreach($data as $row){
echo pq($row)->find('.title')->text().'<br>';
echo pq($row)->find('.image')->find('img').'<br>';
}
echo '</div>';
?>
</body>
</html>


<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>気象情報収集システム</title>
<style>
div{
float: left;
background: #ffffff;
width: 800px;
padding: 20px;
text-align: left;
border: 1px solid #cccccc;
margin: 15px 5px 10px 4px;
color: #ff6600;
}
.image-contents img {
min-width: 300px;
height: auto;
}
body{
background: #f0f8ff;
background-image: url("./type-a1.gif");
}
</style>
</head>
<body>
<h1>気象情報収集システム</h1>
<?php
require_once("phpQuery-onefile.php");
require_once("pathChanger.php");
echo '<div>';
$url = "http://www.jma.go.jp/jp/warn/332_table.html";
$doc = phpQuery::newDocumentFileHTML($url);
echo '<h2>気象庁の警報・注意報情報</h2><br><br>';
echo $doc["#WarnTableTable"].'<br><br>';
echo '</div>';
echo '<div class="image/000_telop_today">';
$img = $doc['.bnrIndexDemand']->find('png');
$img = fullpath($png, $url);
echo $png;
echo '</div>';
?>
</body>
</html>
エラーがたくさん出てきてどうすればよいのか分かりません
表示したいのは、兵庫県の警報・注意報と全国の天気です。
よろしくお願いします。


このページの天気の図を表示したいです。
よろしくお願いします
TAの河島です.
でしたら,一度下記の部分を
-----
echo '<div class="image/000_telop_today">';
$img = $doc['.bnrIndexDemand']->find('png');
$img = fullpath($png, $url);
echo $png;
-----
下記のように変更してみてください.
-----
$url2 = "http://www.jma.go.jp/jp/yoho/";
$doc2 = phpQuery::newDocumentFileHTML($url2);
$img = $doc2['#id']->find('img');
$img = fullpath($img, $url);
echo $img;


警報のほうは出てきますが、天気のほうが真っ白です。
何が原因なのかさっぱりわかりません。
よろしくお願いします。
$url2 = "http://www.jma.go.jp/jp/yoho/";
$doc2 = phpQuery::newDocumentFileHTML($url2);
$img = $doc2['#info']->find('img');
$img = fullpath($img, $url);
echo $img;


下記に変更お願いします.
fullpath関数(先生らが作成した自作関数)はURL1つに対して,1つしか変換できません.
今里さんが,取得しようとしているimgタグは複数あるので,foreachで回して取得するようにすると表示することが可能です.
確認お願いします.
$url2 = "http://www.jma.go.jp/jp/yoho/";
$doc2 = phpQuery::newDocumentFileHTML($url2);
$img = $doc2['#info']->find('img');
foreach($img as $val){
echo pq(fullpath($val,$url2)).'<br>';
}


自分の環境では、天気予報画像の表示をを確認しています。


順位を表示させたいのですが、表示されません。
どのようにすればいいのでしょうか?
<?php
require_once("phpQuery-onefile.php");
require_once("pathChanger.php");
echo '<div>';
$url = "https://applion.jp/iphone/rank/jp/";
$doc = phpQuery::newDocumentFileHTML($url);
echo '取得サイト:'.$doc['title']->text().'<br>';
$date = $doc['.rowprof'];
foreach($date as $row){
echo pq($row)->find('.icon_rank iphone_color')->text();
echo pq($row)->find('.blog')->text();
echo pq($row)->find('.round_img')->find('img');
}
echo '</div>';
echo '<div class="image-contents">';
$img = $doc['.bnrIndexDemand']->find('img');
$img = fullpath($img, $url);
echo $img;
echo '</div>';
?>
<?php
require_once("phpQuery-onefile.php");
require_once("pathChanger.php");
/* 手順1 */
$counter = 0;//カウンター
/* 手順1 */
$counter = 0;//カウンター
$url = "https://applion.jp/iphone/rank/jp/";
$doc = phpQuery::newDocumentFileHTML($url);
echo '取得サイト:'.$doc['title']->text().'<br>';
echo '<div>';
$date = $doc['.rowprof'];
foreach($date as $row){
$counter++;//カウントを増加
echo $counter.'位<br>';
echo pq($row)->find('.neme')->text().'<br>';
echo pq($row)->find('.round_img')->find('img').'<br>';
echo pq($row)->find('.headline')->text().'<br>';
}
?>


<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>海外移籍情報</title>
<h1>海外サッカー移籍情報</h1>
<style>
div {
float: left;
background: #ffffff;
width: 300px;
padding: 20px;
text-align: left;
border: 1px solid #cccccc;
margin: 15px 5px 10px 4px
color: #ff6600;
}
</style>
</head>
<body>
<?php
echo '<div class="first">';
error_reporting(0);
require_once("phpQuery-onefile.php");
require_once("pathChanger.php");
$url = "https://www.thesun.co.uk/topic/transfer-news/";
$uri = "https://www.thesun.co.uk/sport/football/";
$doc = phpQuery::newDocumentFileHTML($url);
$news = $doc[".teaser__copy-container"];
echo 'The SUNの移籍情報';
echo "<div>";
echo fullpath($news, $uri);
echo "</div>";
echo '</div>';
echo '<div class="second">';
error_reporting(0);
require_once("phpQuery-onefile.php");
require_once("pathChanger.php");
$url = "https://www.skysports.com/football/transfer-news";
$uri = "https://www.skysports.com/transfer/news/";
$doc = phpQuery::newDocumentFileHTML($url);
$news = $doc[".title text-h3"];
echo 'Sky Sportsの移籍情報';
echo "<div>";
echo fullpath($news, $uri);
echo "</div>";
echo '</div>';
?>
</body>
</html>
としているのですが<div class="second">としている方が全く表示できません。どうすれば良いでしょうか?
後、<div class="first">の画像の表示方法を別のファイルでいくらか試したのですが全て上手くいかず、どうすれば良いか分からないので、そちらもよろしくお願いします。
まずは,<div class="first">の画像の表示方法からお答えしますね.
TheSunのページでは,画像は「teaser__copy-container」クラスの中の,img要素の中に入っています.
(添付画像を見てください.)


サイトによって,スクレイピングをすると,要素の構造が変わってしまうようです.
また,画像のURLは絶対パスになっているため,fullpath関数は必要ありません.
そのため,以下の手順で画像を表示します.
1. data-src属性のURLを抜き出す.
2.img要素のsrcに指定して表示する.
以下に表示例を載せておきます.(画像の大きさは,CSSで調整してください.)
画像の説明文(「teaser__copy-container」クラス)も同時に表示しなければならないので,書き方を変えています.
親の要素である「teaser-item」クラスを取得し,それをforeach文でループさせています.
echo '<div class="first">';
$url = "https://www.thesun.co.uk/topic/transfer-news/";
$doc = phpQuery::newDocumentFileHTML($url);
/* 「teaser-item」クラスで抜き出す,この中に「teaser__image-container」クラスや「teaser__copy-container」クラスが入っている */
$items = $doc['.teaser-item'];
echo 'The SUNの移籍情報';
echo '<div>';
/* foreach文でループ */
foreach ($items as $item) {
/* 「data-src」属性の中の画像URLを取得する */
$img_url = pq($item)->find('.delayed-image-load-landscape')->attr('data-src');
/* 画像を表示 */
echo '<img src="'.$img_url.'">';
/* 画像の説明文(「teaser__copy-container」クラス)を表示 */
echo pq($item)->find('.teaser__copy-container');
}
echo '</div>';
echo '</div>';


$news = $doc[".title text-h3"];
の書き方が間違いです.恐らくスクレイピング先の
<h2 class="title text-h3">Morrison has ADO Den Haag contract terminated</h2>
を取得しようとしていると見受けられます.
これは,クラスが2つあるという意味で,「title」クラスと「text-h3」クラスの2つがスペースで区切られている状態です.
これをphpqueryで取得するには,カンマ区切りで指定します.
以下のような感じですね.
$news = $doc[".title, .text-h3"];


スクレイピング先のサイトから画像のある要素を探す必要があります.
Google Chromeを使っていれば,F12キーか右クリックでブラウザのデベロッパーモード(検証ツール)を起動することができ,要素を容易に探すことができます.
たとえば,添付画像にあるように,グエンドゥージ選手の画像は,
<div class="box media -bp30-vertical">
の中の
<a href="/transfer/news/12691/12179194/arsenal-transfer-news-and-rumours-january-transfer-window-2021" class="-a-block -auto16/9">
の中に,
<img src="https://e0.365dm.com/21/01/384x216/skysports-guendouzi-hertha-berlin_5233059.jpg?20210110091430" class="image" alt="Is Matteo Guendouzi on his way back to Arsenal? - AP photo">
という形で入っています.
また,その1つ下のウパメカノ選手の画像も同じように入っています.
と,いうことは,
1.「box」「media」「-bp30-vertical」クラスの条件で指定して,div要素を複数取得する
2.その複数のdiv要素をforeach文で1つ1つループさせる
3.「-a-block」「-auto16/9」クラスの条件で指定して,a要素を取得する
4.そのa要素の中にあるimg要素を取得する
というような形で,画像を取得する算段が立てられます.


<html>
<head>
<meta charset="UTF-8">
<title>海外移籍情報</title>
<h1>海外サッカー移籍情報</h1>
<style>
div {
float: left;
background: #ffffff;
width: 300px;
padding: 40px;
text-align: left;
border: 1px solid #cccccc;
margin: 15px 5px 10px 4px
color: #ff6600;
}
</style>
</head>
<body>
<?php
echo '<div class="first">';
error_reporting(0);
require_once("phpQuery-onefile.php");
require_once("pathChanger.php");
$url = "https://www.thesun.co.uk/topic/transfer-news/";
$doc = phpQuery::newDocumentFileHTML($url);
$items = $doc['.teaser-item'];
echo 'The SUNの移籍情報';
echo "<div>";
foreach ($items as $item) {
$img_url = pq($item)->find('.delayed-image-load-landscape')->attr('data-src');
echo '<img src="'.$img_url.'">';
echo pq($item)->find('.teaser__copy-container');
}
echo "</div>";
echo '</div>';
echo '<div class="second">';
error_reporting(0);
require_once("phpQuery-onefile.php");
require_once("pathChanger.php");
$url = "https://www.skysports.com/football/transfer-news";
$doc = phpQuery::newDocumentFileHTML($url);
$items = $doc[".box, .media, .-bp30-vertical"];
echo 'Sky Sportsの移籍情報';
echo "<div>";
foreach ($items as $item) {
$img_url = pq($item)->find('.-a-block, .-auto16/9')->find('img');
echo '<img src="'.$img_url.'">';
echo pq($item)->find('.title, .text-h3');
}
echo"</div>";
echo '</div>';
?>
</body>
</html>
と変更したのですが、二個目のSky Spotrsの方が添付画像のように一つだけ読み込みそれ以外が読み込んでいませんし、画像を表示するところが記事のタイトルと合わないです。また記事のタイトルも繰り返してしまいます。
以下のコードで確認したところ,添付画像のようになりました.
どうやら,このサイトも単純にスクレイピングさせてくれないようです.
1番目の画像に対しては,img要素のsrc属性で画像URLが指定されているのに対し,
2番目以降は,data-src属性に画像URLが指定されています.
<?php
/* 注意メッセージを無視する */
error_reporting(E_ALL & ~E_NOTICE);
require_once("phpQuery-onefile.php");
require_once("pathChanger.php");
echo '<div class="second">';
$url = "https://www.skysports.com/football/transfer-news";
$doc = phpQuery::newDocumentFileHTML($url);
$news_list = $doc[".news-list "];
$items = $news_list[".news-item"];
echo 'Sky Sportsの移籍情報';
echo "<div>";
foreach ($items as $item) {
echo pq($item);
}
echo"</div>";
echo '</div>';
?>


ついでに,リンク先をa要素に指定してみたので,参考にしてください.
echo '<div class="second">';
$url = "https://www.skysports.com/football/transfer-news";
/* リンク先に引っ付ける用(相対パスなので) */
$uri = "https://www.skysports.com";
$doc = phpQuery::newDocumentFileHTML($url);
$news_list = $doc[".news-list "];
$items = $news_list[".news-item"];
echo 'Sky Sportsの移籍情報';
echo "<div>";
/* 順番確認用の変数 */
$i=0;
foreach ($items as $item) {
/* 最初の画像の処理 */
if ($i==0) {
$img_url = pq($item)->find('.-a-block, .-auto16/9')->find('img')->attr('src');
/* 2番目以降の画像の処理 */
} else {
$img_url = pq($item)->find('.-a-block, .-auto16/9')->find('img')->attr('data-src');
}
/* リンク先のURLを取得 */
$href_url = pq($item)->find('.-a-block, .-auto16/9')->attr('href');
/* リンク先のURLをa要素のhref属性に指定 */
echo '<a href="'.$uri.$href_url.'">';
/* 画像の表示 */
echo '<img src="'.$img_url.'">';
/* 文字の表示 */
echo pq($item)->find('.title, .text-h3');
/* a要素の閉じタグ */
echo '</a>';
/* 変数をインクリメント */
$i+=1;
}
echo"</div>";
echo '</div>';


> 出来れば表示したくない
とのことですが,
$img_url = pq($item)->find('.delayed-image-load-landscape')->attr('data-src');
でURLが取得できなかった場合に,以降の処理を飛ばすことで対応できます.
if文で「$img_url」を対象とすると,変数に値が入っているかどうか判別できます.
以下のように修正してください.
/***** 変更前 *****/
foreach ($items as $item) {
$img_url = pq($item)->find('.delayed-image-load-landscape')->attr('data-src');
echo '<img src="'.$img_url.'">';
echo pq($item)->find('.teaser__copy-container');
}
/***** 修正後 *****/
foreach ($items as $item) {
$img_url = pq($item)->find('.delayed-image-load-landscape')->attr('data-src');
/* 取得できている場合は,if文の中を実行する */
if ($img_url) {
echo '<img src="'.$img_url.'">';
echo pq($item)->find('.teaser__copy-container');
}
}


本当に何度もありがとうございました。
<html lang=ja>
<head>
<meta charset="UTF-8">
<title>Web情報収集システム</title>
</head>
<body>
<h1>新型コロナ最新情報</h1>
<?php
require_once("phpQuery-onefile.php");
require_once("pathChanger.php");
echo '<div>';
$url = "https://www.jiji.com/jc/list?g=cov";
$doc = phpQuery::newDocumentFileHTML($url, $charset = 'SJIS');
$data = $doc['.MainInner'];
foreach($data as $row){
echo pq($row)->find('.ArticleListMain')->text().'<br>';
}
echo '</div>';
?>
</body>
</html>
これで表示された文章を改行するにはどうすればよいですか?
1ずつの「li」を取得して,「p」テキストのデータを取り出して表示すれば,改行ができると思います.
PHPのコードも以下に載せておきますね.
(元々書いてあって,不要になった箇所はコメントアウトしています.)
<html lang=ja>
<head>
<meta charset="UTF-8">
<title>Web情報収集システム</title>
</head>
<body>
<h1>新型コロナ最新情報</h1>
<?php
require_once("phpQuery-onefile.php");
require_once("pathChanger.php");
echo '<div>';
$url = "https://www.jiji.com/jc/list?g=cov";
$doc = phpQuery::newDocumentFileHTML($url, $charset = 'SJIS');
/* 修正1 */
$data = $doc['.LinkList>li'];
foreach($data as $row){
/* 修正2 */
echo pq($row)->find('p')->text().'<br>';
}
echo '</div>';
?>
</body>
</html>


http://webdesign.center.wakayama-u.ac.jp:60080/~s256218/exsi2020/report.php
にページがない状態になっています.
最終課題提出のために,ページを見ながら修正箇所を指摘しようと思うので,
report.phpを作成してください.


<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Web情報収集システム</title>
<style>
div {
float: left;
background: #ffffff;
width: 300px;
padding: 20px;
text-align: left;
border: 1px solid #cccccc;
margin: 15px 5px 10px 4px;
color: #ff6600;
}
.image-contents img {
min-width: 300px;
height: auto;
}
body{
background: #f0f8ff;
background-image: url("./type-a1.gif");
}
</style>
</head>
<body>
<h1>Web情報収集システム<h1/>
<?php
error_reporting(E_ALL & ~E_NOTICE);
require_once("phpQuery-onefile.php");
require_once("pathChanger.php");
echo '<div>';
$url = "https://soccer.yahoo.co.jp/ws/standings/52";
$doc = phpQuery::newDocumentFileHTML($url);
echo '取得サイト:'.$doc['title']->text().'<br>';
echo $doc[".sn-table sn-table--ranking"];
echo '</div>';
echo '<div class="image-contents">';
$img = $doc['.bnrIndexDemand']->find('img');
$img = fullpath($img, $url);
echo $img;
echo '</div>';
?>
</body>
</html>
としているのですが表が表示されません。どうすればいいでしょうか。
「sn-table sn-table--ranking」は「sn-table」,「sn-table--ranking」という2つクラスが含まれているので,一つに指定してください.
echo $doc[".sn-table sn-table--ranking"];
の部分を下記のように変更してください.
echo $doc[".sn-table--ranking"];


相対パスから絶対パスへ変換する方法がわかりません。
何度か試行しサイトリンクをクリックしてもNot Foundと表示されます。
また、コマンドプロンプトでは、「phpQuery-onefile.php on line 1235」と表示されているので、おそらく自身のプログラムがどこかで間違えていると思うのですが、どこを改善すればよいでしょうか?
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>appstore ゲームセールスランキング情報収集システム</title>
<style>
</style>
</head>
<body>
<h1>appstore ゲームセールスランキング情報収集システム</h1>
<?php
require_once("phpQuery-onefile.php");
require_once("pathChanger.php");
echo '<div>';
$url = "http://topappranking300.appios.net/top-grossing-iphone/6014.html";
$doc = phpQuery::newDocumentFileHTML($url);
$rank = $doc['.span2'];
echo '取得サイト:'.$doc['title']->text().'<br>';
echo fullpath($rank["a"],$url);
echo '</div>';
?>
</body>
</html>
リンク先のurlがしている「$url」のリンクと違うので,変える必要があります.
また,fullpath()は1対1でしか動作しないので,foreachで一つずつ実行してください.
PHPのコードも以下に載せておきますね.
(元々書いてあって,不要になった箇所はコメントアウトしています.)
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>appstore ゲームセールスランキング情報収集システム</title>
<style>
</style>
</head>
<body>
<h1>appstore ゲームセールスランキング情報収集システム</h1>
<?php
require_once("phpQuery-onefile.php");
require_once("pathChanger.php");
echo '<div>';
$url = "http://topappranking300.appios.net/top-grossing-iphone/6014.html";
$url2 = "http://topappranking300.appios.net/";
$doc = phpQuery::newDocumentFileHTML($url);
$rank = $doc['.span2'];
echo '取得サイト:'.$doc['title']->text().'<br>';
/* 修正 */
$link = $rank->find('a');
foreach($link as $row){
echo pq(fullpath($row,$url2)).'<br>';
}
echo '</div>';
?>
</body>
</html>


<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Web情報収集システム</title>
<style>
</style>
</head>
<body>
<h1>Web情報収集システム</h1>
<?php
require_once("phpQuery-onefile.php");
require_once("pathChanger.php");
$url = "https://music-book.jp/music/news/jrock";
$doc = phpQuery::newDocumentFileHTML($url);
$music = $doc['.mod-news-list'];
echo '<div>';
foreach($music as $row){
echo pq($row)->find('.title');
echo pq($row)->find('.image');
}
echo '</div>';
?>
</body>
</html>
文字とそれに対応する画像をセットで表示させたいのですが、ばらばらに表示されてしまいます。どうすればよいでしょうか。
文字とそれに対応する画像をセットで表示させたいのであれば,「li」要素を一つずつ取り出して表示してください.
PHPのコードも以下に載せておきますね.
(元々書いてあって,不要になった箇所はコメントアウトしています.)
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Web情報収集システム</title>
<style>
</style>
</head>
<body>
<h1>Web情報収集システム</h1>
<?php
require_once("phpQuery-onefile.php");
require_once("pathChanger.php");
$url = "https://music-book.jp/music/news/jrock";
$doc = phpQuery::newDocumentFileHTML($url);
/* 修正1 */
$music = $doc['.mod-news-list>li'];
echo '<div>';
foreach($music as $row){
echo pq($row)->find('.title');
echo pq($row)->find('.image');
}
echo '</div>';
?>
</body>
</html>


-----------------------------------------------
$music = $doc['.mod-news-list'];
$title = $music->find('.title');
$image = $music->find('.image');
echo '<div>';
foreach (array_map(NULL, $title, $image) as [ $t, $i ]) {
echo pq($t) . ':' . pq($i) . '<br>';
}
echo '</div>';


tumblrに投稿されている画像がうまく取得できませんでした。
取得したい画像はpng形式です。
--コード--
<?php
require_once("phpQuery-onefile.php");
require_once("pathChanger.php");
$url = "https://tsueten.tumblr.com/";
$doc = phpQuery::newDocumentFileHTML($url);
echo '取得サイト:'.$doc['title']->text().'<br>';
echo $doc['.the-posts ready>posts-holder posts-grid'];
$img = $doc['.text-post-wrap']->find('img');
$img = fullpath($img, $url);
echo $img;
?>


画像の上のエラーコードを削除し、
枠内にそれぞれの画像が収まるようにしたいです。
枠内にそれぞれの画像が収まるようにしたいであれば,imgの
width=300px;などに変えてみてください.
もし,反映しなければ,cssの importantを使ってみてください.
以下の記事を参考にしてください.
https://takuya-1st.hatenablog.jp/entry/2017/12/21/182700


「error_reporting(E_ALL & ~E_NOTICE);」を書いても「Notice: Undefined property: phpQueryObject::$tagName in /home/s256259/public_html/exsi2020/phpQuery-onefile.php on line 1235」といった注意メッセージが表示されてしまいます。使い方が間違っているのでしょうか?
<?php
require_once("phpQuery-onefile.php");
require_once("pathChanger.php");
echo "<div_G>";
echo " 巨人<br>";
$url_G = "https://baseball.yahoo.co.jp/npb/teams/1/top";
$doc_G = phpQuery::newDocumentFileHTML($url_G);
$data_G = $doc_G["#tm_new"]->find(".sn-list__item");
echo fullpath($data_G["a"],$url_G);
echo "</div_G>";
echo "<div_T>";
echo "阪神<br>";
$url_T = "https://baseball.yahoo.co.jp/npb/teams/5/top";
$doc_T = phpQuery::newDocumentFileHTML($url_T);
$data_T = $doc_T["#tm_new"]->find(".sn-list__item");
echo fullpath($data_T["a"],$url_T);
echo "</div_T>";
echo "<div_D>";
echo "中日<br>";
$url_D = "https://baseball.yahoo.co.jp/npb/teams/4/top";
$doc_D = phpQuery::newDocumentFileHTML($url_D);
$data_D = $doc_D["#tm_new"]->find(".sn-list__item");
echo fullpath($data_D["a"],$url_D);
echo "</div_D>";
echo "<div_B>";
echo "DeNA<br>";
$url_B = "https://baseball.yahoo.co.jp/npb/teams/3/top";
$doc_B = phpQuery::newDocumentFileHTML($url_B);
$data_B = $doc_B["#tm_new"]->find(".sn-list__item");
echo fullpath($data_B["a"],$url_B);
echo "</div_B>";
echo "<div_C>";
echo "広島<br>";
$url_C = "https://baseball.yahoo.co.jp/npb/teams/6/top";
$doc_C = phpQuery::newDocumentFileHTML($url_C);
$data_C = $doc_C["#tm_new"]->find(".sn-list__item");
echo fullpath($data_C["a"],$url_C);
echo "</div_C>";
echo "<div_Y>";
echo "ヤクルト<br>";
$url_Y = "https://baseball.yahoo.co.jp/npb/teams/2/top";
$doc_Y = phpQuery::newDocumentFileHTML($url_Y);
$data_Y = $doc_Y["#tm_new"]->find(".sn-list__item");
echo fullpath($data_Y["a"],$url_Y);
echo "</div_Y>";
error_reporting(E_ALL & ~E_NOTICE);
?>
記述箇所を1番下ではなく、
上の方にして下さい。
(require_once("phpQuery-onefile.php");の上とか)
理由は、phpファイルを一通り実行した後に、1番下で注意メッセージを無視しても意味がないからです。


tumblrから画像を取得し表示することができたのですが、
それぞれの画像が枠から飛び出してしまいます。
CSSで高さと幅を設定しても反映されませんでした。
解決方法が知りたいです。
p.image img {
height: auto;
width: auto;
}
.b-radius img {
width: XXpx;
height: XXpx;
}
で変更できると思います.
参考url:https://www.nishishi.com/css/resize-image-keep-aspect-ratio.html


コードは以下です
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Wed情報システム</title>
<style>
div {
float: left;
background: #ffffff;
width: 300px;
padding: 20px;
text-aling: left;
border: 1px solid #cccccc;
margin: 15px 5px 10px 4px;
color: #000000;
}
</style>
</head>
<body>
<h1>お菓子レシピ収集システム</h1>
<?php
require_once("phpQuery-onefile.php");
require_once("pathChanger.php");
echo '<div>';
$url = "https://delishkitchen.tv/categories/6";
$doc = phpQuery::newDocumentFileHTML($url);
echo '取得サイト:'.$doc['title']->text().'<br>';
$data = $doc['.slide-wrapper'];
foreach($data as $row){
echo pq($row)->find('.recipe-title')->text().'<br>';
echo pq($row)->find('.rank-text')->text().'<br>';
echo pq($row)->find('item-card_img-wrap>item-card_img-wrap-inner')->find("img").'<br>';
}
echo '</div>';
?>
</body>
</html>
スクレイピング先のURLをこちらで確認してみましたが,
おそらく制限がかかっており,画像が取れなくなっているみたいです.
代替案として以下の2つを提案します.
・別のサイトを使用する
・画像だけローカルで保存し,その保存した画像をサーバにアップロードして使用する.
ちなみに,下記の部分ですが,
echo pq($row)->find('item-card_img-wrap>item-card_img-wrap-inner')->find("img").'<br>';
echo pq($row)->find('.item-card_img-wrap>item-card_img-wrap-inner')->find("img").'<br>';
に変更してください.
抽出したいクラス名の前に付ける「.」が抜けていました.
引き続き頑張ってください!


別のサイトを使用してやってみます
二つのサイトを重ならずに左右に分割して表示させる方法がわからないです。また、サイトの画像の大きさを変えたいのですが、数値を変更してもほとんど変化しません。どうすればよいのでしょうか。
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Web情報収集システム</title>
<style>
div {
float: left;
background: #000000;
width: 600px;
padding: 10px;
text-align: left;
border: 3px solid #cccccc;
margin: 15px 5px 10px 4px;
color: #008000;
}
body{
background: #ff6600;
}
.news_image{
display:block;
width:100px;
height:120px;
}
</style>
</head>
<body>
<h1>Web情報収集システム</h1>
<?php
error_reporting(E_ALL & ~E_NOTICE);
require_once("phpQuery-onefile.php");
require_once("pathChanger.php");
echo '<div>';
$url = "https://funky802.com/";
$doc = phpQuery::newDocumentFileHTML($url);
echo '取得サイト:'.$doc['title']->text().'<br>';
$news = $doc['.inner-box'];
echo fullpath($news["li"],$url);
echo '</div>';
?>
<?php
error_reporting(E_ALL & ~E_NOTICE);
require_once("phpQuery-onefile.php");
require_once("pathChanger.php");
echo '<div>';
$url = "https://www.allnightnippon.com/";
$doc = phpQuery::newDocumentFileHTML($url);
echo '取得サイト:'.$doc['title']->text().'<br>';
$news = $doc['.index_news'];
echo fullpath($news["li"],$url);
echo '</div>';
?>
</body>
</html>
左右に分割というのが,私のイメージとあっているかはわかりませんが,
<style>
div {
float: left;
background: #000000;
width: 600px; ←を200とかにすると小さくなります,
もし,ウインドウサイズに合わせて変化させたい場合は,
https://techacademy.jp/magazine/39348
こちらが参考になるかと思います.
画像の大きさに関しては,
p.news_image img {
width:150px;
…
}
のように変えてみてください.
下のサイトが参考になるかと思います.
https://www.nishishi.com/css/resize-image-keep-aspect-ratio.html


プログラムを作成したのですが、作成したサイトを閲覧すると文字化けを起こして大量の文字が出てきます。これはどういうことでしょうか?
以下は作成したプログラムです。
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Appstore セールスランキング情報収集システム</title>
</head>
<body>
<h1>Appstore セールスランキング情報収集システム</h1>
<?php
require_once("phpQuery-onefile.php");
require_once("pathChanger.php");
echo '<div>';
$url = "https://appmedia.jp/app_review/2607505";
$doc = phpQuery::newDocumentFileHTML($url);
echo '取得サイト:'.$doc['title']->text().'<br>';
echo $doc['.top_sales_ul>li'];
echo '</div>';
?>
</body>
</html>
また,大量文字ついては隠れているだけです.(画像を参照してください.)
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Appstore セールスランキング情報収集システム</title>
</head>
<body>
<h1>Appstore セールスランキング情報収集システム</h1>
<?php
require_once("phpQuery-onefile.php");
require_once("pathChanger.php");
echo '<div>';
$url = "https://appmedia.jp/app_review/2607505";
/* 修正1 */
$doc = phpQuery::newDocumentFileHTML($url, $charset = 'SJIS');
echo '取得サイト:'.$doc['title']->text().'<br>';
/* 修正2 */
echo $doc['.top_sales_ul>li']->text().'<br>';
echo '</div>';
?>
</body>
</html>


<! DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Web情報収集システム</title>
</head>
<body>
<h1>新型コロナ最新情報</h1>
<?php
require_once("phpQuery-onefile.php");
require_once("pathChanger.php");
echo '<div>';
$url = "https://www.jiji.com/jc/list?g=cov/";
$doc = phpQuery::newDocumentFileHTML($url);
echo $doc['.LinkList>li'];
echo '</div>';
?>
</body>
</html>
このように書いたのですが、最新情報がでません。
どうすればよいでしょうか。
下記のコードに変更してみてください.
文字化けしてしまうため,文字コードにSJISを指定しています.
(他の文字コードだと文字化けする)
<! DOCTYPE html>
<html lang=ja>
<head>
<meta charset="UTF-8">
<title>Web情報収集システム</title>
</head>
<body>
<h1>新型コロナ最新情報</h1>
<?php
require_once("phpQuery-onefile.php");
require_once("pathChanger.php");
echo '<div>';
$url = "https://www.jiji.com/jc/list?g=cov";
$doc = phpQuery::newDocumentFileHTML($url, $charset = 'SJIS');
$data = $doc['.MainInner'];
foreach($data as $row){
echo pq($row)->find('.ArticleListMain')->text().'<br>';
}
echo '</div>';
?>
</body>
</html>


コードは以下の通りです。
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>テレビ番組ランキング</title>
<style>
div {
float: left;
background: #ffffff;
width: 800px;
padding: 20px;
text-align: left;
border: 5px solid #cccccc;
margin: 15px 5px 10px 5px;
color: #ff6600;
}
body {
background: #f0f8ff;
background-image: url("./download.jpg");
}
</style>
</head>
<body>
<h1>テレビ番組ランキング</h1>
<?php
require_once("phpQuery-onefile.php");
require_once("pathChanger.php");
echo '<div>';
$url = "https://tver.jp/ranking/";
$doc = phpQuery::newDocumentFileHTML($url);
echo '取得サイト:'.$doc['title']->text().'<br>';
$data = $doc['.detail_link'];
foreach($data as $row){
echo pq($row)->find('.rank')->text().'<br>';
echo pq($row)->find('.progtitle')->text().'<br>';
echo pq($row)->find('.picinner')->find('img').'<br>';
}
echo '</div>';
?>
</body>
</html>
>> 画像の表示方法がわかりません
とのことですが,順を追って説明します.
今回スクレイピングの対象としたサイト(https://tver.jp/ranking/)の画像表示方法が,添付画像にある通り,div要素のstyle属性としてbackground-imageのURLで指定されていますね.
この場合,面倒くさいですが,以下の手順で取り出し,表示します.
1.style属性の中身「background-image:url(https://〜.jpg);」を取得する.
2.str_replace関数で要らないもの「background-image:url(」「);」を除去する.
3.画像のURLだけになったので,img要素のsrc属性に指定して表示させる.
PHPのコードも以下に載せておきますね.
(元々書いてあって,不要になった箇所はコメントアウトしています.)
<?php
require_once("phpQuery-onefile.php");
require_once("pathChanger.php");
echo '<div>';
$url = "https://tver.jp/ranking/";
$doc = phpQuery::newDocumentFileHTML($url);
echo '取得サイト:'.$doc['title']->text().'<br>';
$data = $doc['.detail_link'];
foreach($data as $row){
echo pq($row)->find('.rank')->text().'<br>';
echo pq($row)->find('.progtitle')->text().'<br>';
// echo pq($row)->find('.picinner').'<br>';
/* 手順1 */
$background_image_url = pq($row)->find('.picinner')->attr('style');
/* 手順2 */
$replace_url = str_replace('background-image:url(', '', $background_image_url);
$replace_url = str_replace(');', '', $replace_url);
/* 手順3 */
echo '<img src="'.$replace_url.'">'.'<br>';
}
echo '</div>';
?>


無事画像を表示することができました。


画像とテキストをそれぞれ紐づけしたいのですが、羅列されてしまいます。ランキングのように表示するためにはどのようにすればよいのでしょうか。
コードは以下の通りです。
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Web情報収集システム</title>
<style>
div {
float: left;
background: #ffffff;
width: 800px;
padding: 20px;
text-align: center;
border: 1px solid #cccccc;
margin: 15px 5px 10px 4px;
color: #ff6600;
}
.image-contents img {
min-width: 300px;
height: auto;
}
body{
background: #99ffcc;
}
</style>
</head>
<body>
<h1>Web情報収集システム</h1>
<?php
require_once("phpQuery-onefile.php");
require_once("pathChanger.php");
echo '<div>';
$url = "https://kakaku.com/pc/mp3-player/ranking_0130/";
$doc = phpQuery::newDocumentFileHTML($url);
echo '取得サイト:'.$doc['title']->text().'<br>';
$data = $doc['#main'];
foreach($data as $row){
echo pq($row)->find('.rkgBoxName')->text().'<br>';
echo pq($row)->find('.rkgItemImg')->find('img').'<br>';
}
echo '</div>';
?>
</body>
</html>
以下の手順で.ランキング表示ができます.
1.順位を表示するために,$countという変数を作成します.
2.画像とテキスト(商品名)が含まれている「rkgBox」を先に取得します.
3.$countの値を1ずつ増やし,一個ずつ画像やテキストのデータを取り出して表示する.
また,ランキング表示についてはスライド85ページにやり方が載っているので参考してください.
PHPのコードも以下に載せておきますね.
(元々書いてあって,不要になった箇所はコメントアウトしています.)
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Web情報収集システム</title>
<style>
div {
float: left;
background: #ffffff;
width: 800px;
padding: 20px;
text-align: center;
border: 1px solid #cccccc;
margin: 15px 5px 10px 4px;
color: #ff6600;
}
.image-contents img {
min-width: 300px;
height: auto;
}
body{
background: #99ffcc;
}
</style>
</head>
<body>
<h1>Web情報収集システム</h1>
<?php
/* 手順1 */
$counter = 0;//カウンター
require_once("phpQuery-onefile.php");
require_once("pathChanger.php");
echo '<div>';
$url = "https://kakaku.com/pc/mp3-player/ranking_0130/";
$doc = phpQuery::newDocumentFileHTML($url);
echo '取得サイト:'.$doc['title']->text().'<br>';
/* 手順2 */
$data = $doc['#main']->find('.rkgBox');
foreach($data as $row){
/* 手順3 */
$counter++;//カウントを増加
echo $counter.'位<br>';
echo pq($row)->find('.rkgBoxName')->text().'<br>';
echo pq($row)->find('.rkgItemImg')->find('img').'<br>';
}
echo '</div>';
?>
</body>
</html>


同じものが二回反復してしまいます。後者だけを表示するためにはどうすればよいでしょうか?
コードは以下の通りです。
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Web情報システム</title>
<style>
body {
background: #f0f8ff;
background-image: url("./type-a1.gif");
}
</style>
</head>
<body>
<hl>美味しい野菜の見つけ方</h1>
<?php
require_once("phpQuery-onefile.php");
require_once("pathChanger.php");
echo '<div>';
$url_1 = "https://www.yasainavi.com/calendar/";
$doc_1 = phpQuery::newDocumentFileHTML($url_1);
$url_2 = "https://yaosho101.com/select/";
$doc_2 = phpQuery::newDocumentFileHTML($url_2);
echo '取得サイト:'.$doc_1['title']->text().'<br>';
echo $topic_1 = $doc_1['.table-responsive'];
echo '取得サイト:'.$doc_2['title']->text();
echo $topic_2 = $doc_2['.contents'];
echo '</div>';
echo '<div>';
echo fullpath($topic_1,$url_1);
echo fullpath($topic_2,$url_2);
echo '</div>';
echo error_reporting(E_ALL & ~E_NOTICE);
?>
<body/>
</html>
-------------------------------
echo '取得サイト:'.$doc_1['title']->text().'<br>';
echo $topic_1 = $doc_1['.table-responsive'];
echo '取得サイト:'.$doc_2['title']->text();
echo $topic_2 = $doc_2['.contents'];
echo '</div>';
echo '<div>';
echo fullpath($topic_1,$url_1);
echo fullpath($topic_2,$url_2);
echo '</div>';
echo error_reporting(E_ALL & ~E_NOTICE);
-------------------------------
上記の部分ですが,
echo $topic_1 = $doc_1['.table-responsive'];
echo $topic_2 = $doc_2['.contents'];
と
echo fullpath($topic_1,$url_1);
echo fullpath($topic_2,$url_2);
は同じ内容が出力されることが予想されます.
前者の
echo $topic_1 = $doc_1['.table-responsive'];
echo $topic_2 = $doc_2['.contents'];
を
$topic_1 = $doc_1['.table-responsive'];
$topic_2 = $doc_2['.contents'];
に変換してみてください.


<div>PHP Notice: Undefined property: phpQueryObject::$tagName in /home/s256247/public_html/exsi2020/phpQuery-onefile.php on line 1235
というエラーがいくつか出ているのですが、これはWebスクレイピングができないということでしょうか。
該当のPHPコードを添付していただけますか?


$url = "https://www.shonenjump.com/j/comics/";
$doc = phpQuery::newDocumentFileHTML($url);
$news = $doc["jumpcomicsList"];
echo fullpath($news["li"],$url);
echo '</div>';
おそらくこの部分だと思います。


スクレイピングの対象と思われる箇所は,
<section class="jump comicsList">
の内部ですよね?
この場合,クラス名が2つあって,スペースで区切られているだけです.
ゆえに,要素の指定は「jump」または「comicsList」のどちらかで行います.
(両方を指定するやり方もありますが,気になるのであれば調べてみてください.)
話を戻しますが,「comicsList」で指定した場合,下部に存在する
<section class="j_plus comicsList">
<section class="saikyo comicsList">
の2つも対象となってしまいます.「jump」で指定すれば,
<section class="jump comicsList">
の内部のみが取得できるはずです.そうすると,
$news = $doc["jumpcomicsList"];
は,
$news = $doc[".jump"];
に書き換える必要があります.


Notice: Undefined property: phpQueryObject::$tagName...
の注意メッセージが表示されると思います.これは,
$news["li"]
で取得している要素が単一ではなく,複数のものであるからです.これは,fullpath関数の仕様で,本当であれば,fullpath関数の引数2つは,1対1の関係でなければなりません.
溝口さんの返信にも書いてあるので,見てみてください.
注意メッセージの云々もそっちに書いています.
以上を踏まえると,PHPのコードは以下になるかと思います.画像の大きさや,li要素の黒丸などについては,CSSで適宜調整を行って下さい.
<?php
error_reporting(E_ALL & ~E_NOTICE); /* 注意メッセージを無視する */
require_once("phpQuery-onefile.php");
require_once("pathChanger.php");
echo '<div>';
$url = "https://www.shonenjump.com/j/comics/";
$doc = phpQuery::newDocumentFileHTML($url);
$news = $doc[".jump"];
echo fullpath($news["li"], $url);
echo '</div>';
?>




Notice: Undefined property: phpQueryObject::$tagName in /home/s256259/public_html/exsi2020/phpQuery-onefile.php on line 1235
というのが2つ続けて表示されます。
おそらく
echo fullpath($news["li"],$url);
の部分が原因だと思うのですが、何が間違っているのでしょうか。
>> echo fullpath($news["li"],$url);
>> の部分が原因だと思う
その通りです.
fullpath関数の仕様としては,1番目の引数に指定された1要素の相対パスを,2番目のもので絶対パスに書き換える関数です.
「1要素」というのがポイントです.(詳細は,pathChanger.phpのfullpath関数のコードを見ると確認することができますが...)
そのため,複数のまとまった要素を,fullpath関数の1番目の引数に入れていると,要素名をうまく取得することができず,「Notice: Undefined property:」の注意メッセージが表示されることとなります.
一応,fullpath関数は複数のまとまった要素に対しても,見かけ上適応できてはいますが,注意メッセージが表示されるのは上記の理由の為です.
複数の画像に対してfullpath関数を適用する場合は,講義資料の81Pなどが参考になると思います.
しかし,面倒くさい場合は,注意メッセージを無視する方法もあります.
phpの箇所に「error_reporting(E_ALL & ~E_NOTICE);」を書くと,注意メッセージだけ表示しないようにできます.(エラー文はちゃんと表示されます.)
(該当箇所のPHPコードを添付していただければ,アドバイス等できますが,現状ではこんな感じの返信となります.)


web情報システムのプログラムを入力して、プロンプトまではちゃんと実行できたのですが、自分のサイトを開くことが出来ません。ちゃんと自分の学籍番号に変更して開こうとしましたが、「このサイトにアクセスするにはサインインしてください」という表示が出てパスワード等入力したのですが実行できません。何か解決方法はありますか。
> 自分のサイトを開くことが出来ません。
とのことですが,
・ユーザ名:webd
・パスワード:Sakaeda2
でアクセスすることができます.
詳しくは授業スライド34Pを確認してください.


初めてのHTMLのページ!とブラウザに表示するところで何度行っても見つかりませんと出るのですがどうしたらいいですか。
こちらから確認したところ,public_html内のディレクトリ構造が以下のようになっていました.
- /exsi2020
|
- /exsi
|
- hello.html
「exsi」というフォルダは不要です.「exsi」は削除し,次のように配置し直してください.
- /exsi2020
|
- hello.html
これにより「http://webdesign.center.wakayama-u.ac.jp:60080/~s256108/exsi2020/hello.html」のURLで見られるようになるはずです!


Notice: Undefined property: phpQueryObject::$tagName in /home/s256204/public_html/exsi2020/phpQuery-onefile.php on line 1235
というエラーを同時に6つも吐くのですが、未定義のプロパティというものが何なのか分かりません。どこを間違えているのでしょうか。
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>report</title>
</head>
<body>
<h1>目指せポケモンマスター</h1>
<?php
require_once("phpQuery-onefile.php");
require_once("pathChanger.php");
echo "<div>";
$url = "https://gamewith.jp/pokemon-sword-shield/article/show/175815";
$doc = phpQuery::newDocumentFileHTML($url);
echo '<h2>使用率ランキング</h2><br><br>';
echo '一位';
$img = $doc['.article-ogimage']->find('img');
$img = fullpath($img,$url);
echo $img;
$url2 = "https://gamewith.jp/pokemon-sword-shield/article/show/207489";
$doc2 = phpQuery::newDocumentFileHTML($url2);
echo '二位';
$img2 = $doc2['.article-ogimage']->find('img');
$img2 = fullpath($img,$url);
echo $img2;
$url3 = "https://gamewith.jp/pokemon-sword-shield/article/show/207504";
$doc3 = phpQuery::newDocumentFileHTML($url3);
echo '三位';
$img3 = $doc3['.article-ogimage']->find('img');
$img3 = fullpath($img,$url);
echo $img3;
?>
</body>
「未定義のプロパティ」とのことですが,
$img = $doc['.article-ogimage']->find('img');
$img = fullpath($img,$url);
の記述が不自然です.スクレイピング先の要素を確認すると,
<img src="https://img.gamewith.jp/article/thumbnail/rectangle/175815.png" alt="エースバーンの進化と覚える技&種族値" class="article-ogimage">
となっているため,$doc['.article-ogimage']から更にimg要素を取ることができません.
また,画像のパスが絶対パスになっているので,fullpath関数は必要ありません.
以下のようにしてみてください.
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>report</title>
</head>
<body>
<h1>目指せポケモンマスター</h1>
<?php
require_once("phpQuery-onefile.php");
require_once("pathChanger.php");
echo "<div>";
$url = "https://gamewith.jp/pokemon-sword-shield/article/show/175815";
$doc = phpQuery::newDocumentFileHTML($url);
echo '<h2>使用率ランキング</h2><br><br>';
echo '<br>一位<br>';
$img = $doc['.article-ogimage'];
echo $img;
$url2 = "https://gamewith.jp/pokemon-sword-shield/article/show/207489";
$doc2 = phpQuery::newDocumentFileHTML($url2);
echo '<br>二位<br>';
$img2 = $doc2['.article-ogimage'];
echo $img2;
$url3 = "https://gamewith.jp/pokemon-sword-shield/article/show/207504";
$doc3 = phpQuery::newDocumentFileHTML($url3);
echo '<br>三位<br>';
$img3 = $doc3['.article-ogimage'];
echo $img3;
?>
</body>
</html>


1つ目のNewsがうまく表示されませんなぜでしょうか
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>スポーツニュース</title>
<style>
div {
float: left;
background: #f0f8ff;
padding: 10px;
width: 300px;
height: 800px;
margin: 5px 15px 10px 15px;
color: #ff6600;
overflow-y: scroll;
}
hl{
font-size: 60px;
background: #f0f8ff;
color: #00ECFF;
border: 1px solid #cccccc;
margin: 5px 150px 150px 10px;
}
body {
background: #f0f8ff;
background-image: url("./thumbnail.png");
}
.c-firstNews{
text-align: center;
overflow-x: hidden;
}
.c-secondNews{
text-align: center;
}
</style>
</head>
<body>
<hl>スポーツニュース</hl>
<?php
require_once("phpQuery-onefile.php");
require_once("pathChanger.php");
echo '<div class="c-firstNews">';
$url = "ttps://basketballking.jp/";
$doc = phpQuery::newDocumentFileHTML($url);
$news = $doc['.container'];
echo fullpath($news["li"],$url);
echo '</div>';
echo '<div class="c-secondNews">';
$url = "https://www.nikkansports.com/soccer/world/news/";
$doc = phpQuery::newDocumentFileHTML($url);
echo $doc[".newslist"];
echo '</div>';
?>
</body>
</html>
出口のさんの言っている「1つ目のNews」がどの要素のことを指しているのかわかりません.
もう少し具体的に教えて頂きたいです!


$url = "ttps://basketballking.jp/";
$doc = phpQuery::newDocumentFileHTML($url);
$news = $doc['.container'];
echo fullpath($news["li"],$url);
echo '</div>';
1つ目のNewsはこのサイトでの新着Newsを表しているのですが表示されないです


⇒URLの中身が間違えてます!"h"が抜けています!
$url = "https://basketballking.jp/";
上記のように修正してください!




上記でcontainerクラスを指定していますが,リンク先のサイトにcontainerクラスが複数あり,そこに広告も含まれているので,すべて表示されています.
もっとIDやclassを指定し直した方が良いと思います!
(抽出したい部分を)


error_reporting(0); /* 警告文を無視する */


バスケットボールニュースの方ですが,idが「latest-tab-latest」のものを取得してみるといいかもしれません.
CSSが悪さをしているので,コメントアウトしています.CSSは適宜変えてください.
コードはこんな感じで↓
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>スポーツニュース</title>
<style>
// div {
// float: left;
// background: #f0f8ff;
// padding: 10px;
// width: 300px;
// height: 800px;
// margin: 5px 15px 10px 15px;
// color: #ff6600;
// overflow-y: scroll;
// }
// hl{
// font-size: 60px;
// background: #f0f8ff;
// color: #00ECFF;
// border: 1px solid #cccccc;
// margin: 5px 150px 150px 10px;
// }
// body {
// background: #f0f8ff;
// background-image: url("./thumbnail.png");
// }
// .c-firstNews{
// text-align: center;
// overflow-x: hidden;
// }
// .c-secondNews{
// text-align: center;
// }
</style>
</head>
<body>
<hl>スポーツニュース</hl>
<?php
require_once("phpQuery-onefile.php");
require_once("pathChanger.php");
echo '<div class="c-firstNews">';
$url = "https://basketballking.jp/";
$doc = phpQuery::newDocumentFileHTML($url);
$news = $doc['#latest-tab-latest'];
echo $news;
echo '</div>';
echo '<div class="c-secondNews">';
$url = "https://www.nikkansports.com/soccer/world/news/";
$doc = phpQuery::newDocumentFileHTML($url);
echo $doc[".newslist"];
echo '</div>';
?>
</body>
</html>


期限も近い中すみませんが、fullpath()を正常に使うことができません。
過去ログにあったような
$news = $doc['取得したクラス名'];
echo fullpath($news['li'],$url);
を試しましたが、サイトによっては、エラーが表示されるがリンクはしっかりとできたり、エラーメッセージしか表示されなくなったりします。
改善策はありませんでしょうか。
以下、ソースコードです。
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>プログラミング情報収集システム</title>
<style>
div {
float: left;
background: #F3FFD8;
padding: 10px;
width: 650px;
height: 800px;
margin: 5px 15px 10px 15px;
color: #000066;
overflow-y: scroll;
}
hl{
font-size: 60px;
background: #F3FFD8;
color: #00ECFF;
border: 1px solid #cccccc;
margin: 5px 150px 150px 10px;
}
body {
background: #f0f8ff;
background-image: url("./maxresdefault.jpg");
}
.c-firstArticle{
text-align: center;
overflow-x: hidden;
}
.c-secondArticle{
text-align: center;
}
.firstNews{
text-align: left;
overflow-x: hidden;
}
.secondNews{
text-align: left;
overflow-x: hidden;
}
</style>
</head>
<body>
<hl>プログラミング情報</hl>
<?php
require_once("phpQuery-onefile.php");
require_once("pathChanger.php");
echo '<div class="c-firstArticle">';
$url = "http://www.itsenka.com/contents/development/c/";
$doc = phpQuery::newDocumentFileHTML($url);
$news = $doc['.contentsList'];
echo fullpath($news["li"],$url);
echo '</div>';
echo '<div class="firstNews">';
$url = "https://blog.codecamp.jp/programming";
$doc = phpQuery::newDocumentFileHTML($url);
$news = $doc['.c-post_title'];
echo fullpath($news['li'],$url);
echo '</div>';
echo '<div class="c-secondArticle">';
$url = "http://www.isl.ne.jp/pcsp/beginC/";
$doc = phpQuery::newDocumentFileHTML($url);
echo $doc[".item"];
echo '</div>';
echo '<div class="secondNews">';
$url = "https://news.biglobe.ne.jp/list/015/892/%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0.html";
$doc = phpQuery::newDocumentFileHTML($url);
echo $doc[".kw-news"]->find(".kw-title");
echo $doc[".kw-news"]->find(".date");
echo '</div>';
?>
</body>
</html>
確認したところ,1番上は警告文が表示されるがリンクはしっかりとできています.2番目の所は,警告文のみの表示.3番目と4番目は正常ですね.
警告文に関しては,エラーではないので,「error_reporting(0);」により警告文の表示を無視することができます.
2番目のところは,「c-post_title」クラスの中にli要素がないため,表示できていません.参考までにスクリーンショットを添付しておきます.
以下,コードを書き換えてみたので,参考までに.
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>プログラミング情報収集システム</title>
<style>
div {
float: left;
background: #F3FFD8;
padding: 10px;
width: 650px;
height: 800px;
margin: 5px 15px 10px 15px;
color: #000066;
overflow-y: scroll;
}
hl{
font-size: 60px;
background: #F3FFD8;
color: #00ECFF;
border: 1px solid #cccccc;
margin: 5px 150px 150px 10px;
}
body {
background: #f0f8ff;
background-image: url("./maxresdefault.jpg");
}
.c-firstArticle{
text-align: center;
overflow-x: hidden;
}
.c-secondArticle{
text-align: center;
}
.firstNews{
text-align: left;
overflow-x: hidden;
}
.secondNews{
text-align: left;
overflow-x: hidden;
}
</style>
</head>
<body>
<hl>プログラミング情報</hl>
<?php
error_reporting(0); /* 警告文を無視する */
require_once("phpQuery-onefile.php");
require_once("pathChanger.php");
echo '<div class="c-firstArticle">';
$url = "http://www.itsenka.com/contents/development/c/";
$doc = phpQuery::newDocumentFileHTML($url);
$news = $doc['.contentsList'];
echo fullpath($news["li"],$url);
echo '</div>';
echo '<div class="firstNews">';
$url = "https://blog.codecamp.jp/programming";
$doc = phpQuery::newDocumentFileHTML($url);
$news = $doc['.c-post_title'];
echo fullpath($news,$url); /* li要素は無いので取得しない */
echo '</div>';
echo '<div class="c-secondArticle">';
$url = "http://www.isl.ne.jp/pcsp/beginC/";
$doc = phpQuery::newDocumentFileHTML($url);
echo $doc[".item"];
echo '</div>';
echo '<div class="secondNews">';
$url = "https://news.biglobe.ne.jp/list/015/892/%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0.html";
$doc = phpQuery::newDocumentFileHTML($url);
echo $doc[".kw-news"]->find(".kw-title");
echo $doc[".kw-news"]->find(".date");
echo '</div>';
?>
</body>
</html>


試行錯誤している間に新たな問題も生じてしまいました。
echo '<div class="c-secondArticle">';
$url = "http://www.isl.ne.jp/pcsp/beginC/";
$doc = phpQuery::newDocumentFileHTML($url);
echo '取得サイト:'.$doc['title']->text().'<br>';
echo $doc[".item"]->find("p");
echo '</div>';
上記のコードを反映させたときに、サイトから持ってきた画像が途中までは表示され、あるところからは表示されなくなりました。
ご助力いただけないでしょうか。


スクレイピング先のサイトでは,画像ファイルのURLが相対パスになっていますよね?
以下のように変更して下さい.
echo '<div class="c-secondArticle">';
$url = "http://www.isl.ne.jp/pcsp/beginC/";
$doc = phpQuery::newDocumentFileHTML($url);
echo '取得サイト:'.$doc['title']->text().'<br>';
$item_list = $doc[".item"]->find("p");
echo fullpath($item_list, $url);
echo '</div>';
「$item_list」は,一時的な変数として作成しただけなので,あまり気にしないでください.
授業まで時間がないですが,頑張ってください!


お手数をおかけしました。


スライドのようにリンク先に飛ぶように試みたところ、下のようなエラーメッセージが出てきました。
PHP Notice: Undefined property: phpQueryObject::$tagName in /home/s256286/public_html/exsi2020/phpQuery-onefile.php on line 1235
PHP Stack trace:
PHP 1. {main}() /home/s256286/public_html/exsi2020/report.php:0
PHP 2. fullpath() /home/s256286/public_html/exsi2020/report.php:36
PHP 3. image() /home/s256286/public_html/exsi2020/pathChanger.php:5
PHP 4. checkElmType() /home/s256286/public_html/exsi2020/pathChanger.php:40
PHP 5. phpQueryObject->__get() /home/s256286/public_html/exsi2020/pathChanger.php:98
phpQueryObjectが未定義だと書いてあると思うのですが、どこで間違えたのか分かりません。↓ソースコードです。
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Web情報収集システム</title>
<style>
div {
float: left;
background: #ffffff;
width: 300px;
padding: 20px;
text-align: left;
border: 1px solid #cccccc;
margin: 15px 5px 10px 4px
color: #ff6600;
}
.image-contents img {
min-width: 300px;
height: auto;
}
body {
background: #f0f8ff;
background-image: url("./type-a1.gif");
}
</style>
</head>
<body>
<h1>ゲームニュース</h1>
<?php
require_once("phpQuery-onefile.php");
require_once("pathChanger.php");
$url = "https://www.famitsu.com/search/?category=news";
$doc = phpQuery::newDocumentFileHTML($url);
$news = $doc[".card__body"];
echo "<div>";
echo fullpath($news["li"],$url);
echo "</div>";
?>
</body>
</html>
どこがおかしいか教えていただけると幸いです。
エラーの感じを見たところ、
fullpath($news["li"],$url);の$news["li"]の部分が怪しいですね。
ーーーーー
echo "<div>";
echo fullpath($news["li"],$url);
echo "</div>";
と書いている部分を
echo "<div>";
$img = $news->find("li");
echo fullpath($img,$url);
echo "</div>";
とするのがいいかもしれません。
("li"は"img"と書き間違いかな?でしたらimgに書き換えてみてください。)


この部分↓
$news = $doc[".card__body"];
echo "<div>";
echo fullpath($news["li"],$url);
echo "</div>";
を消すかコメントアウトしてから実行してみてください。
それでもエラーが出るなら、多分ファイルの位置関係が怪しいです。
でなければ、上で指示した部分が怪しいです。
一度試してみてください。


恐らく,スクレイピングをする箇所を変更する必要があると思います.
対象サイト(https://www.famitsu.com/search/?category=news)の要素を確認したものを,画像として添付しています.
山中さんがやりたいと思っているリンク先は「card__body」クラスの中の「li」要素ではなく,「card__title」クラスの中の「a」要素に入っているものではないでしょうか?
そして,fullpath関数でリンク先を相対パスから絶対パスに書き換える処理をしているのですが,パスがかみ合っていません.
画像にある例だとリンク先が「https://www.famitsu.com/news/202011/17209578.html」となっています.
a要素には「/news/202011/17209578.html」しか入っていませんから,「https://www.famitsu.com/search/?category=news」とくっつけるのは不自然ですよね?(https://www.famitsu.com/search/?category=news/news/202011/17209578.htmlとなってしまいます.)
なので,「https://www.famitsu.com/」とくっつけてあげる必要があります.
以下に適当にコードを書いてみたので,参考にしてみてください.
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Web情報収集システム</title>
<style>
div {
float: left;
background: #ffffff;
width: 300px;
padding: 20px;
text-align: left;
border: 1px solid #cccccc;
margin: 15px 5px 10px 4px
color: #ff6600;
}
.image-contents img {
min-width: 300px;
height: auto;
}
body {
background: #f0f8ff;
background-image: url("./type-a1.gif");
}
</style>
</head>
<body>
<h1>ゲームニュース</h1>
<?php
error_reporting(0); /* 警告文を無視する */
require_once("phpQuery-onefile.php");
require_once("pathChanger.php");
$url = "https://www.famitsu.com/search/?category=news"; /* スクレイピング先 */
$uri = "https://www.famitsu.com"; /* fullpath関数用 */
$doc = phpQuery::newDocumentFileHTML($url);
$news = $doc[".card__title"];
echo "<div>";
echo fullpath($news, $uri);
echo "</div>";
?>
</body>
</html>


サイトのURLを貼り付けたのですがうまく表示されませんどうしたらいいでしょうか。またサイトの検証からどうすればいいかわかりません
あくまで可能性として,サイトのURLが間違っているかどうかをもう一度確認してみてください.
また,取得するタグ("img")があっているかも確認してみてください.


<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>野球ニュース</title>
<style>
body {
background: #f0f8ff;
background-image: url("./thumbnail.png");
}
div {
float: left;
background: #ffffff;
width: 300px;
padding: 20px;
text-align: left;
border: 1px solid #cccccc;
margin: 15px 5px 10px 4px;
color: #ff6600;
}
.image-contents img {
min-width: 300px;
height: auto;
}
</style>
</head>
<body>
<h1>野球ニュース</h1>
<?php
require_once("phpQuery-onefile.php");
require_once("pathChanger.php");
echo '<div>';
$url = "https://sports.yahoo.co.jp/news/list?id=npb/";
$doc = phpQuery::newDocumentFileHTML($url);
echo '取得サイト:'.$doc['title']->text().'<br>';
echo $doc['.update>dd'];
echo '</div>';
echo '<div class="image-contents">';
$img = $doc['.bnrIndexDemand']->find('img');
$img = fullpath($img, $url);
echo $img;
echo '</div>';
?>
</body>
</html>


下に書き換えた例を載せますので,参考にしてください.
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>野球ニュース</title>
<style>
body {
background: #f0f8ff;
background-image: url("./thumbnail.png");
}
div {
float: left;
background: #ffffff;
width: 300px;
padding: 20px;
text-align: left;
border: 1px solid #cccccc;
margin: 15px 5px 10px 4px;
color: #ff6600;
}
.image-contents img {
min-width: 300px;
height: auto;
}
</style>
</head>
<body>
<h1>野球ニュース</h1>
<?php
require_once("phpQuery-onefile.php");
require_once("pathChanger.php");
echo '<div>';
$url = "https://sports.yahoo.co.jp/news/list?id=npb";
$doc = phpQuery::newDocumentFileHTML($url);
echo '取得サイト:'.$doc['title']->text().'<br>';
echo $doc['#listLinkOutline'];
echo '</div>';
echo '<div class="image-contents">';
$img = $doc['img'];
echo $img;
echo '</div>';
?>
</body>
</html>


require_once("phpQuery-onefile.php");
require_once("pathChanger.php");
$url = "http://natalie.mu/music/news/list";
$doc = phpQuery::newDocumentFileHTML($url);
$news = $doc[".NA_articleList"];
このようになっていたのですがこの$newsは何でしょうか


特に意味はないです!名前はnews以外でも大丈夫です!


ぎりぎりですみません
どこがダメかわかりません
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Web情報収集システム</title>
</head>
<body>
<h1>Web情報収集システム</h1>
<?php
require_once("phpQuery-onefile.php");
require_once("pathChanger.php");
$url = "hhttps://www.irasutoya.com/";
$doc = phpQuery::newDocumentFileHTML($url);
echo $doc["#widget-content popular-posts"];
?>
</body>
</html>
$url = "hhttps://www.irasutoya.com/";






何度やってみても画像が表示されないのですが、どのようにしたら画像が表示されるのでしょうか。
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>吹奏楽ニュース</title>
<style>
div {
float: light;
background: #ffffff;
width: 400px;
padding: 40px;
text-align: light;
border: 1px solid #cccccc;
margin: 15px 5px 10px 4px;
color: #ff6600;
}
</style>
</head>
<body>
<h1>吹奏楽ニュース</h1>
<?php
require_once("phpQuery-onefile.php");
require_once("pathChanger.php");
$url = "https://news.biglobe.ne.jp/list/021/955/%E5%90%B9%E5%A5%8F%E6%A5%BD.html";
$doc = phpQuery::newDocumentFileHTML($url);
$news = $doc[".kw-news:eq(0)"];
$img = $doc['div']->find('img');
$img = fullpath($img, $url);
echo "<div>";
echo $news;
echo "</div>";
?>
</body>
</html>
前回できたところから、何を追加して動かなくなったか、
教えていただいてもよろしいでしょうか?




スライド39枚目の「二つのライブラリを取得します」の部分か,「拡張子のtxtを取り除いて下さい」を実施して、一度はできたということに加え、phpファイルを添付してくれていることから、
51ページの部分で詰まっているのではないかと推測します。
ーーーーーーーーーーーーーーーーーーーーーーーー
多分、$news = $doc[".kw-news:eq(0)"];の行で指定している
.kw-news:eq(0)の部分がhtml内のタグとして存在していないのではないかと思います。(もしかしてnews-listかな?)
なので一度そこを見ていただきたく思います。




何回やってもタイトルしか出てきません。どうしてでしょう。
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>WEB情報収集システム</title>
<style>
</style>
</head>
<body>
<h1>ランキング</h1>
<?php
require_once("phpQuery-onefile.php");
require_once("pathChanger.php");
$url = "https://music.dmkt-sp.jp/rank/k-pop/daily/";
$doc = phpQuery::newDocumentFileHTML($url);
echo "<div>";
$ranking = $doc["#ranking-contents"];
echo $ranking;
echo "</div>";
?>
</body>
</html>
「何も表示されない」とのことですが,
指定しているサイト(dミュージック)のid="ranking_contents"のところが,スクレイピング対策をされているためだと思います.
一応,コンテンツ内容以外の部分(サイト上部のジャンルなど)はスクレイピングで取得できることは確認しました.


エラーが出たのでコマンドプロンプトで調べたところ
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Web情報収集システム</title>
<style>
div {
float: left;
background: #ffffff;
width: 300px;
padding: 20px;
text-align: left;
border: 1px solid #cccccc;
margin: 15px 5px 10px 4px
color: #ff6600;
}
.image-contents img {
min-width: 300px;
height: auto;
}
body {
background: #f0f8ff;
background-image: url("./type-a1.gif");
}
</style>
</head>
<body>
<h1>ゲームニュース</h1>
PHP Warning: file_get_contents(https://www.famitsu.com/search/?category=news/): failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
in /home/s256286/public_html/exsi2020/phpQuery-onefile.php on line 4767
PHP Stack trace:
PHP 1. {main}() /home/s256286/public_html/exsi2020/report.php:0
PHP 2. phpQuery::newDocumentFileHTML() /home/s256286/public_html/exsi2020/report.php:33
PHP 3. phpQuery::newDocumentFile() /home/s256286/public_html/exsi2020/phpQuery-onefile.php:4782
PHP 4. file_get_contents() /home/s256286/public_html/exsi2020/phpQuery-onefile.php:4767
Warning: file_get_contents(https://www.famitsu.com/search/?category=news/): failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
in /home/s256286/public_html/exsi2020/phpQuery-onefile.php on line 4767
Call Stack:
0.0001 223152 1. {main}() /home/s256286/public_html/exsi2020/report.php:0
0.0068 1445808 2. phpQuery::newDocumentFileHTML() /home/s256286/public_html/exsi2020/report.php:33
0.0068 1446032 3. phpQuery::newDocumentFile() /home/s256286/public_html/exsi2020/phpQuery-onefile.php:4782
0.0068 1446080 4. file_get_contents() /home/s256286/public_html/exsi2020/phpQuery-onefile.php:4767
<div></div></body>
と表示されました。これはこのサイトではスクレイピングができないということでしょうか。それともまた別の原因があるのでしょうか。
指定したURLにページが存在していない為、「failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found」の表示が出るのだと思われます。
投稿してくれたURL(https://www.famitsu.com/search/?category=news/)を確認しましたが、やはりページが存在しないようです。
確認してみて下さい。


PHP Notice: Undefined property: phpQueryObject::$tagName in /home/s256286/public_html/exsi2020/phpQuery-onefile.php on line 1235
PHP Stack trace:
PHP 1. {main}() /home/s256286/public_html/exsi2020/report.php:0
PHP 2. fullpath() /home/s256286/public_html/exsi2020/report.php:36
PHP 3. image() /home/s256286/public_html/exsi2020/pathChanger.php:5
PHP 4. checkElmType() /home/s256286/public_html/exsi2020/pathChanger.php:40
PHP 5. phpQueryObject->__get() /home/s256286/public_html/exsi2020/pathChanger.php:98
phpQueryObjectが未定義だと書いてあると思うのですが、どこで間違えたのか分かりません。↓ソースコードです。
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Web情報収集システム</title>
<style>
div {
float: left;
background: #ffffff;
width: 300px;
padding: 20px;
text-align: left;
border: 1px solid #cccccc;
margin: 15px 5px 10px 4px
color: #ff6600;
}
.image-contents img {
min-width: 300px;
height: auto;
}
body {
background: #f0f8ff;
background-image: url("./type-a1.gif");
}
</style>
</head>
<body>
<h1>ゲームニュース</h1>
<?php
require_once("phpQuery-onefile.php");
require_once("pathChanger.php");
$url = "https://www.famitsu.com/search/?category=news";
$doc = phpQuery::newDocumentFileHTML($url);
$news = $doc[".card__body"];
echo "<div>";
echo fullpath($news["li"],$url);
echo "</div>";
?>
</body>
</html>
どこがおかしいか教えていただけると幸いです。
URLごとの内容をそれぞれ異なる列に置きたいのですがどのようにするとよいでしょうか?
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>カラオケランキング</title>
<style>
float: left;
text-align:left;
</style>
</head>
<body>
<h1>カラオケ週間ランキングTOP100</h1>
<?php
require_once("phpQuery-onefile.php");
require_once("pathChanger.php");
$url = "https://www.clubdam.com/app/dam/ranking/vocaloid-weekly.html";
$doc = phpQuery::newDocumentFileHTML($url);
$url2 = "https://www.clubdam.com/app/dam/ranking/animation-weekly.html";
$doc2 = phpQuery::newDocumentFileHTML($url2);
echo "<div>";
$rank = $doc[".ranking-list"];
echo $rank;
echo "</div>";
echo "<div>";
$rank2 = $doc2[".ranking-list"];
echo $rank2;
echo "</div>";
?>
</body>
</html>
「異なる列に置きたい」とは,左右に並べる,という解釈でよろしいでしょうか?
以下のサイトがとても分かりやすいと思います.
https://webst8.com/blog/css-float/
また,コードを適当に書き替えてみたので,ご参考までに.
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>カラオケランキング</title>
<style>
#ranking-left {
float: left;
width: 50%;
}
#ranking-right {
float: right;
width: 50%;
}
</style>
</head>
<body>
<h1>カラオケ週間ランキングTOP100</h1>
<?php
require_once("phpQuery-onefile.php");
require_once("pathChanger.php");
$url = "https://www.clubdam.com/app/dam/ranking/vocaloid-weekly.html";
$doc = phpQuery::newDocumentFileHTML($url);
$url2 = "https://www.clubdam.com/app/dam/ranking/animation-weekly.html";
$doc2 = phpQuery::newDocumentFileHTML($url2);
echo "<div id='ranking-left'>";
$rank = $doc[".ranking-list"];
echo $rank;
echo "</div>";
echo "<div id='ranking-right'>";
$rank2 = $doc2[".ranking-list"];
echo $rank2;
echo "</div>";
?>
</body>
</html>




画像データの取得のプログラムを書いて、ブラウザで確認しようとしたところ、認証とパスワードの画面が出てきて自分の画面がブラウザで確認できなくなってしまいました。どのようにしたら確認できるようになるでしょうか。
あと,URLが正しいかどうかも確認してください.
ユーザ名:webd
パスワード:Sakaeda2


何度も質問に答えてくださってありがとうございます。
背景画像の大きさを調整するにはどうしたら良いでしょうか?
<style>
body {
background-image: url("./画像のURL");
}
</style>
上記のリンクを参考にしてみてください!
background-size: 【任意のパラメータ】;
これを追加してあげることで、調整できると思います。
※【任意のパラメータ】には、作成したいなサイトに合うようにpixel数、他のパラメータなどを入力して下さい!


画像データ取得方法のやり方について
何度やってもこのような表示が出てくるのですが、原因が分かりません。
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Web情報収集システム</title>
</head>
<body>
<h1>Web情報収集システム</h1>
PHP Warning: require_once(pathChanger.php): failed to open stream: No such file or directory in /home/s256237/public_html/exsi2020/index.php on line 11
PHP Stack trace:
PHP 1. {main}() /home/s256237/public_html/exsi2020/index.php:0
Warning: require_once(pathChanger.php): failed to open stream: No such file or directory in /home/s256237/public_html/exsi2020/index.php on line 11
Call Stack:
0.0002 225168 1. {main}() /home/s256237/public_html/exsi2020/index.php:0
PHP Fatal error: require_once(): Failed opening required 'pathChanger.php' (include_path='.:/usr/share/pear:/usr/share/php:/home/s256237/public_html/exsi2020/phpQuery/:/home/s256237/public_html/exsi2020/phpQuery/plugins/') in /home/s256237/public_html/exsi2020/index.php on line 11
PHP Stack trace:
PHP 1. {main}() /home/s256237/public_html/exsi2020/index.php:0
Fatal error: require_once(): Failed opening required 'pathChanger.php' (include_path='.:/usr/share/pear:/usr/share/php:/home/s256237/public_html/exsi2020/phpQuery/:/home/s256237/public_html/exsi2020/phpQuery/plugins/') in /home/s256237/public_html/exsi2020/index.php on line 11
Call Stack:
0.0002 225168 1. {main}() /home/s256237/public_html/exsi2020/index.php:0
[s256237@webdesign exsi2020]$ Connection reset by 133.42.53.141 port 60022
「PHP Warning: require_once(pathChanger.php): failed to open stream: No such file or directory」ということで,「pathChanger.php」が存在していません.
スライド39枚目の「二つのライブラリを取得します」の部分か,「拡張子のtxtを取り除いて下さい」が実施できていないのだと思います.
確認してみてください.




エラーが消えない上、最後の方に画像が密集してしまったのですが原因わかりますか?
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>web情報収集システム</title>
<style>
</style>
</head>
<body>
<h1>Web情報収集システム</h1>
<?php
require_once("phpQuery-onefile.php");
require_once("pathChanger.php");
$url = "https://youkosozitsuryoku-2nd.com/news/";
$doc = phpQuery::newDocumentFileHTML($url);
$news = $doc["#content"];
echo "<div>";
echo fullpath($news["li"],$url);
echo "</div>";
echo '<div>';
$imgs = $doc['#content']->find('img');
foreach ($imgs as $tmp) {
$tmp2 = fullpath($tmp, "https://youkosozitsuryoku-2nd.com/news/");
echo pq($tmp2);
}
echo '</div>';
?>
</body>
</html>
「error_reporting(0);」により,警告文を無視することができます.
2回目で申し訳ありませんが,以下のように書き換えてください.
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>web情報収集システム</title>
<style>
</style>
</head>
<body>
<h1>Web情報収集システム</h1>
<?php
require_once("phpQuery-onefile.php");
require_once("pathChanger.php");
$url = "https://youkosozitsuryoku-2nd.com/news/";
$doc = phpQuery::newDocumentFileHTML($url);
error_reporting(0); // 警告文を無視する
$news = $doc["#content"];
echo "<div>";
echo fullpath($news['li'], $url);
echo "</div>";
?>
</body>
</html>


WinSCPのexsi2020が消えてしまい、新たに作ろうとしても既に存在していると言われ、下のようなメッセージが出てきました。原因が全く分かりません。どうすればいいでしょうか。
Command 'ls -la '
failed with return code 2 and error message
ls: cannot open directory .: Permission denied.
WINSCPとかsshの接続の状況の画像をみせてくれるとわかるかもしれません。
おそらく,山中さんの場所ではないところに,ファイルを作成しようとしているので,上記のように「権限がない」と怒られているような気がします.
まずは,「ls」コマンドで,自分がどこにいるかを確認してから,
「cd」コマンドで自分の場所へ移動してみてください.


一応,エラー内容で検索したら,下記のモノが出てきたので,確認してみてください.
https://winscp.net/forum/viewtopic.php?t=11872




コマンドプロンプトで以下のようなエラーが出ますが、原因を教えてくれないでしょうか。
[s256286@webdesign exsi2020]$ php index.php
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Web情報収集システム</title>
</head>
<body>
<h1>Web情報収集システム</h1>
PHP Warning: file_get_contents(http://www/wakayama-u.ac.jp/): failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
in /home/s256286/public_html/exsi2020/phpQuery-onefile.php on line 4767
PHP Stack trace:
PHP 1. {main}() /home/s256286/public_html/exsi2020/index.php:0
PHP 2. phpQuery::newDocumentFileHTML() /home/s256286/public_html/exsi2020/index.php:12
PHP 3. phpQuery::newDocumentFile() /home/s256286/public_html/exsi2020/phpQuery-onefile.php:4782
PHP 4. file_get_contents() /home/s256286/public_html/exsi2020/phpQuery-onefile.php:4767
Warning: file_get_contents(http://www/wakayama-u.ac.jp/): failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
in /home/s256286/public_html/exsi2020/phpQuery-onefile.php on line 4767
Call Stack:
0.0002 223744 1. {main}() /home/s256286/public_html/exsi2020/index.php:0
0.0100 1412248 2. phpQuery::newDocumentFileHTML() /home/s256286/public_html/exsi2020/index.php:12
0.0100 1412472 3. phpQuery::newDocumentFile() /home/s256286/public_html/exsi2020/phpQuery-onefile.php:4782
0.0100 1412520 4. file_get_contents() /home/s256286/public_html/exsi2020/phpQuery-onefile.php:4767
取得サイト:<br></body>
</html>[s256286@webdesign exsi2020]$
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Web情報収集システム</title>
</head>
<body>
<h1>Web情報収集システム</h1>
<?php
require_once("phpQuery-onefile.php");
$url = "http://www/wakayama-u.ac.jp/";
$doc = phpQuery::newDocumentFileHTML($url);
echo '取得サイト:'.$doc['title']->text().'<br>';
echo $doc['.update>dd'];
?>
</body>
</html>
他にもあるかもしれませんが.
ソースコードをみると,
$url = "http://www/wakayama-u.ac.jp/";
www.wakayama-u.ac.jp
にしないといけないですね.
wwwのあとです.
良くソースコードをみくらべるといいとおもいます.
Web情報収集システム
取得サイト:和歌山大学 -Shape the future for our tomorrow.-
とだけ表示されて情報が全く表示されません。コマンドプロンプトでもエラーはありませんでした。
<!DOCYTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Web情報収集システム</title>
</head>
<body>
<h1>Web情報収集システム</h1>
<?php
require_once("phpQuery-onefile.php");
$url = "http://www.wakayama-u.ac.jp/";
$doc = phpQuery::newDocumentFileHTML($url);
echo '取得サイト:'.$doc['title']->text().'<br>';
echo $doc['.updata>dd'];
?>
</body>
</html>
echo $doc['.updata>dd'];
これの
update
a->e
では?
NO.639 を参考にしても文字化けします
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Web情報収集システム</title>
</head>
<body>
<h1>Web情報収集システム</h1>
<?php
require_once("phpQuery-onefile.php");
$url="https://www.oricon.co.jp/news/tag/id/drama/";
$html=file_get_contents($url);
mb_language('Japanese');
$doc=phpQuery::newDocument(mb_convert_encoding($html, 'HTML-ENTITIES', 'auto'));
echo '取得サイト:'.$doc['title']->text().'<dr>';
$article = $doc['article'];
echo $article;
?>
</body>
</html>
ブラウザをGoogleChromeでやってみて下さい.
このプログラムだと、bodyの中にheaderが入ってしまいます。解決応報を教えてください。
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>カレー情報</title>
<style>
header {
background: #f8b500;
background-image: url("./curry.jpg")
}
body {
float: left;
background: #f8b500;
width: 1230px;
padding: 20px;
text-align: left;
border: 1px solid #cccccc;
margin: 15px 5px 10px 4px;
}
</style>
</head>
<header>
<h1>最近のカレー</h1>
</header>
<body>
<?php
require_once("phpQuery-onefile.php");
$url = "https://currydaigaku.jp/";
$doc = phpQuery::newDocumentFileHTML($url);
echo '最近のカレー:'.$doc['title']->text().'<dr>';
echo $doc['#news>feed_news'];
?>
</body>
</html>
ただ,bodyの中にheaderが入らないようにしたコードを下に記すので,参考にしてみてください.
----------
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>カレー情報</title>
<style>
body{
background: #f8b500;
background-image: url("./curry.jpg")
}
div {
float: left;
background: #f8b500;
width: 1230px;
padding: 20px;
text-align: left;
border: 1px solid #cccccc;
margin: 15px 5px 10px 4px;
}
</style>
</head>
<body>
<h1>最近のカレー</h1>
<?php
require_once("phpQuery-onefile.php");
$url = "https://currydaigaku.jp/";
$doc = phpQuery::newDocumentFileHTML($url);
echo '最近のカレー:'.$doc['title']->text().'<dr>';
echo $doc['#news>feed_news'];
?>
</body>
</html>
https://currydaigaku.jp/のサイトからカレー最新情報を取ってきたいのですが、classがなくて書き方が分からないです。また、背景の色を変えているのに、反映されないです。現時点で、書いているプログラミングはこれです。
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>カレー情報</title>
<style>
div{
float: left;
background: #f8b500;
width: 300px;
padding: 20px;
text-align: left;
border: 1px solid #cccccc;
margin: 15px 5px 10px 4px;
}
</style>
</head>
<body>
<h1>最近のカレー</h1>
<?php
require_once("phpQuery-onefile.php");
$url = "https://currydaigaku.jp/";
$doc = phpQuery::newDocumentFileHTML($url);
echo '最近のカレー:'.$doc['title']->text().'<dr>';
echo $doc['.news>feed_news'];
?>
</body>
</html>
もしかしたら,スクレイピングがブロックされているか,今回の単純な手法では難しいのかもしれません.
別のページを利用することをおすすめします.
ちなみに無理やり枠だけ表示させると,背景色は適用されていました.
見えないのは,要素が何もないからです.
また,classが無かったらidをでもいいですよ(というかidがあるならidのほうが基本は楽です)
classは「.news」のように書きますが,idは「#news」のように#を使います.参考にまで.


選択したボタンによって$urlに代入するリンクを変え、表示する内容を変えようとしているのですが、うまくいきません。間違っているところが分からないので教えていただきたいです。
<?php
require_once("phpQuery-onefile.php");
require_once("pathChanger.php");
echo '<div>';
$url = "https://eiga.com/coming/"
echo '<select name = "type">';
echo '<option value = "a">今月</option>';
echo '<option value = "b">来月</option>';
echo '<option value = "c">再来月</option>';
echo "</select>";
echo '<input type = "submit" name = "search" value = "検索" />';
echo "</form>";
if(value == "a"){
$url = "https://eiga.com/coming/"
}
if(value == "b"){
$url = "https://eiga.com/coming/202002/"
}
if(value == "c"){
$url = "https://eiga.com/coming/202003/"
}
$doc = phpQuery::newDocumentFileHTML($url);
echo '取得サイト:'.$doc['title']->text().'<br>';
$data = $doc['.list-block'];
foreach($data as $row){
echo pq($row)->find('.img-box')->find(img).'<br>';
echo pq($row)->find('.title')->text().'<br>';
echo pq($row)->find('.txt')->text().'<br>';
}
echo'</div>';
echo'<div class="image-contents">';
$img = $doc['.bnrIndexDemand']->find('img');
$img = fullpath($img, $url);
echo $img;
echo '</div>';
?>
いくつか間違っている部分がありますね
echo "</form>";
と書いていますが
まず<form>がないのでその部分を作ってください.
次に
$url = "https://eiga.com/coming/"
のように$urlの末尾に「;」が抜けています
参考サイト
http://www.weblaboratory.jp/WP/phptrial/2011/07/15/sec07/
最後にプログラムを全部まとめています.
<?php
require_once("phpQuery-onefile.php");
require_once("pathChanger.php");
echo '<div>';
$url = "https://eiga.com/coming/";
echo '<form action = "index.php" method = "POST">';//ここのindex.phpはaさんがつけているプログラムのファイル名に合わせてください.
echo '<select name = "type">';
echo '<option value = "a">今月</option>';
echo '<option value = "b">来月</option>';
echo '<option value = "c">再来月</option>';
echo "</select>";
echo '<input type = "submit" name = "search" value = "検索" />';
echo "</form>";
if(isset($_POST['type'])){//検索ボタンを押す前だと$_POST['type']の中身に何も入っていなくてエラーが出るのでエラー対策をしています.
if($_POST['type'] == "a"){
$url = "https://eiga.com/coming/";
}
if($_POST['type'] == "b"){
$url = "https://eiga.com/coming/202002/";
}
if($_POST['type'] == "c"){
$url = "https://eiga.com/coming/202003/";
}
}
$doc = phpQuery::newDocumentFileHTML($url);
echo '取得サイト:'.$doc['title']->text().'<br>';
$data = $doc['.list-block'];
foreach($data as $row){
echo pq($row)->find('.img-box')->find(img).'<br>';
echo pq($row)->find('.title')->text().'<br>';
echo pq($row)->find('.txt')->text().'<br>';
}
echo'</div>';
echo'<div class="image-contents">';
$img = $doc['.bnrIndexDemand']->find('img');
$img = fullpath($img, $url);
echo $img;
echo '</div>';
?>


南海本線だけを表示したいのですが、クラス名が同じためか他の線まで出てしまいます。どうすればいいですか。
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>運行状況・天気</title>
<style>
body {
background: #f0f8ff;
background-image: url("./type-a1.gif");
}
div {
float: left;
background: #ffffff;
width: 300px;
padding: 20px;
text-align: left;
border: 1px solid #cccccc;
margin: 15px 5px 10px 4px;
color: #ff6600;
}
</style>
</head>
<body>
<h1>運行状況・天気</h1>
<?php
require_once("phpQuery-onefile.php");
require_once("pathChanger.php");
echo '<div>';
$url = "http://www.nankai.co.jp/railinfo.html";
$doc = phpQuery::newDocumentFileHTML($url);
echo '取得サイト:'.$doc['title']->text().'<br>';
$data = $doc['#nankailineinfo'];
foreach($data as $row){
echo pq($row)->find('.infoin')->find('.sen')->text().'<br>';
echo pq($row)->find('.infoin')->find('.joukyou')->text().'<br>';
}
echo '</div>';
?>
</body>
</html>
<html>
<head>
<meta charset="UTF-8">
<title>明松のページ</title>
<style>
body {
background: #f0f8ff;
background-image: url("./type-a1.gif");
}
div {
float: left;
background: #ffffff;
width: 300px;
padding: 20px;
text-align: left;
border: 1px solid #cccccc;
margin: 15px 5px 10px 4px;
color: #ff6600;
}
</style>
</head>
<body>
<h1>運行状況・天気</h1>
<?php
require_once("phpQuery-onefile.php");
require_once("pathChanger.php");
echo '<div>';
$url = "http://www.nankai.co.jp/railinfo.html";
$doc = phpQuery::newDocumentFileHTML($url);
echo '取得サイト:'.$doc['title']->text().'<br>';
$data = $doc['#nankailineinfo>.infoin'];//! 探すDOMが一段階ずれている.classがinfoinのものだけとりあえず取り出す場合はこう書く
$seraching = '南海本線'; //! 探したい路線名はここに書く
foreach($data as $row){
$line = pq($row)->find('.sen')->text(); //! 路線名のみ取得,上記のDOMが一つずれたためシンプルになっている
if($line == $seraching){
echo $line.'<br>';//! 路線名出力
echo pq($row)->find('.joukyou')->text().'<br>';//! 状況取得&出力,上記のDOMが一つずれたためシンプルになっている
}
}
echo '</div>';
?>
</body>
</html>
今回の場合は,路線名を取得してそれが南海本線かどうかを,if文で分岐させるしかないので,そんな風に書いてます.
また,その関係でDOM要素取得(pq($row)の部分)が一段階ずれてしまうので,$dataの段階で.infoinまで検索して取ってます.
詳細は,プログラムのコメントに書いてあるので
見ておいてください.
日本語だけがどうしても文字化けしてしまうのですが、取得先サイトの文字コードに合わせても化けたままで、直し方が分かりません。よろしくお願いします。
<!--FM802の今日のオンエア曲目-->
<!DOCTYPE html>
<html lang = "jp">
<head>
<meta charset="UTF-8">
<title>Web情報収集システム</title>
<style>
div {
float: left;
background: #ffffff;
width: 300px;
padding: 20px;
text-align: left;
border: 1px solid #cccccc
margin: 15px 5px 10px 4px;
color: #ff6600;
}
body {
background: #f0f8ff;
}
</style>
</head>
<body>
<h1>FM802オンエア曲目</h1>
<?php
require_once("phpQuery-onefile.php");
//require_once("pathChanger.php");学校サーバでやるときに必要
echo "<div>";
$url = "https://funky802.com/service/OnairList/today";
$doc = phpQuery::newDocumentFileHTML($url,'UTF-8');
$news = $doc[".noa-song-list"];
echo '取得サイト:'.$doc['title']->text().'<br>';
echo "<div>";
echo $news;
echo "</div>";
?>
</body>
</html>
大きな表の下にある今日・明日の天気だけを残したい(ツイートから下をなくしたい)のですが、どのようにすればいいかわかりません。よろしくお願いします。
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Web情報収集システム</title>
<style>
</style>
</head>
<body>
<hl>和歌山うみ情報</hl>
<?php
require_once("phpQuery-onefile.php");
require_once("pathChanger.php");
echo '<div1>';
$url = "https://www.data.jma.go.jp/gmd/kaiyou/db/tide/suisan/suisan.php?stn=WY";
$doc = phpQuery::newDocumentFileHTML($url);
echo $doc['#main>table'];
echo '</div1>';
require_once("phpQuery-onefile.php");
require_once("pathChanger.php");
echo '<div2>';
$url = "https://tenki.jp/wave/6/33/47/";
$doc = phpQuery::newDocumentFileHTML($url);
echo $doc['#main-column'];
echo '</div2>';
?>
</body>
</html>
コード内に一応補足コメントを書いていますので参考にしてください.
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Web情報収集システム</title>
<style>
</style>
</head>
<body>
<hl>和歌山うみ情報</hl>
<?php
require_once("phpQuery-onefile.php");
require_once("pathChanger.php");
echo '<div1>';
$url = "https://www.data.jma.go.jp/gmd/kaiyou/db/tide/suisan/suisan.php?stn=WY";
$doc = phpQuery::newDocumentFileHTML($url);
echo $doc['#main>table'];
echo '</div1>';
require_once("phpQuery-onefile.php");
require_once("pathChanger.php");
echo '<div2>';
$url = "https://tenki.jp/wave/6/33/47/";
$doc = phpQuery::newDocumentFileHTML($url);
echo $doc['#main-column .wave-point-h3']; //「今日・明日の天気●日●発表」の部分
echo $doc['#main-column .wave-forecast-days-wrap']; //実際の天気予報の部分
echo '</div2>';
?>
</body>
</html>


以下のようにしたところ同じものが複数表示されてしまいます。同じような質問がほかにもありましたがよくわかりません。宜しくお願い致します。
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Web情報収集システム</title>
</head>
<body>
<h1>Web情報収集システム</h1>
<?php
require_once("phpQuery-onefile.php");
require_once("pathChanger.php");
$url = "https://switch.soft-db.net/";
$doc = phpQuery::newDocumentFileHTML($url);
$url1 = "https://switch.soft-db.net/best/best_01.html";
$doc1 = phpQuery::newDocumentFileHTML($url1);
echo '取得サイト:'.$doc['title']->text().'<br>';
echo '<h2>人気ソフトランキング</h2><br><br>';
$data = $doc1['table'];
foreach($data as $row){
$linktext = pq($row)->find('a');
$linktext = fullpath($data,$url);
$img = pq($row)->find('img');
echo $linktext."<br>";
}
//https://com.wakayama-u.ac.jp/~s246190/exsi2019/report.php
?>
</body>
</html>
元のサイトの「何を」取りたくて,「何の」同じものが複数表示されているのでしょうか.




https://switch.soft-db.net/best/best_01.html
の結果だけが取れている状態だと思います.
何も重複していないように思います.
どの画像が重複しているのか,もう少し具体的に教えてもらえますか?


よって,1つめのランキングが含まれるもの(=1つめのテーブル)のみを出力したらいいと思います.
コード例は以下になります.
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Web情報収集システム</title>
</head>
<body>
<h1>Web情報収集システム</h1>
<?php
require_once("phpQuery-onefile.php");
require_once("pathChanger.php");
$url = "https://switch.soft-db.net/";
$doc = phpQuery::newDocumentFileHTML($url);
$url1 = "https://switch.soft-db.net/best/best_01.html";
$doc1 = phpQuery::newDocumentFileHTML($url1);
echo '取得サイト:'.$doc['title']->text().'<br>';
echo '<h2>人気ソフトランキング</h2><br><br>';
$data = $doc1['.best table'];
$row = $data[0]; //←ここでひとつめのテーブルを指定したものをもとのコードの$rowに代入
$linktext = pq($row)->find('a');
$linktext = fullpath($data,$url1);
//$img = pq($row)->find('img');
echo $linktext."<br>";
?>
</body>
</html>


以下のように書いたところ、リンク先が表示されず画像も表示されませんでした。この解決方法を教えてください。よろしくお願いいたします。
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Web情報収集システム</title>
</head>
<body>
<h1>Web情報収集システム</h1>
<?php
require_once("phpQuery-onefile.php");
require_once("pathChanger.php");
$url = "https://switch.soft-db.net/";
$doc = phpQuery::newDocumentFileHTML($url);
$url1 = "https://switch.soft-db.net/best/best_01.html";
$doc1 = phpQuery::newDocumentFileHTML($url1);
echo '取得サイト:'.$doc['title']->text().'<br>';
echo '取得サイト:'.$doc1['title']->text().'<br>';
echo '<h2>人気ソフトランキング</h2><br><br>';
$data = $doc1['.tablesorter'];
foreach($data as $row){
$linktext = pq($row)->find('a');
$linktext = fullpath($linktext,$url);
$img = pq($row)->find('img');
$img = fullpath($img,$url);
echo $linktext."<br>";
}
echo '<h2>発売予定順</h2><br><br>';
$higherText = $doc['.schedule']->find('a');
$count = 1;
foreach ($higherText as $tmp) {
echo $count.':'.pq($tmp).'<br>';
$count = $count + 1;
}
//https://com.wakayama-u.ac.jp/~s246190/exsi2019/report.php
?>
</body>
</html>
リンク先が表示されないのは,$url1に対してフルパスの処理をしていないからだと思います.
$urlと同じ要領でfullpath()を使ってみてください.


以下のように書いたところ、同じものが二つ表示されるようになってしまいました。一つにしたいです。
あと、添付した写真のグレーの部分も追加したいのですがやり方がわかりません。よろしくお願いします。
<!DOCTYPE html>
<html>
<head>
<meta charset="UFS-8">
<title>システム</title>
<style>
</style>
</head>
<body>
<h1>漫画最新巻情報</h1>
<?php
require_once("phpQuery-onefile.php");
require_once("pathChanger.php");
echo '<div>';
$url = "https://calendar.gameiroiro.com/manga.php";
$doc = phpQuery::newDocumentFileHTML($url);
echo '取得サイト:'.$doc['title']->text().'<br>';
echo $doc['.globalNav'];
echo '</div>';
?>
</body>
</html>
とりあえず,『#container』にある方の『.globalNav』をとればいいと思います.
echo $doc['#container > .globalNav'];
次に,table要素のとり方ですが,idやクラスと同じような書き方でtableを指定すれば大丈夫です.(#や.は必要ありません.)
echo $doc['#content-inner > table'];
上記のコードを追加すれば,上手くいくと思います.
http://xn--dkqp0gri91r38rn1wmlurtz.com/archives/37583450.html
このサイトの現在展示中、今後の予定と書いてある部分の表をもってこようとしたのですが、表の形にならない上に、他の部分の表までもってきてしまいます。おそらく、zukanlist_bg01,.zukanlist_bg02としていることに原因があるとは思うのですが、どうすればいいのかわかりません。よろしくお願いします。
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>web情報収集システム</title>
<style>
body {
background: #f0f8ff;
background-image: url("./katana.jpg");
}
div {
color: #000000;
float: left;
background: #ffffff;
width: 600px;
padding: 20px;
text-align: left;
border: 1px solid #cccccc;
margin: 15px 5px 10px 4px;
}
</style>
</head>
<body>
<h1>web情報収集システム</h1>
<?php
require_once("phpQuery-onefile.php");
require_once("pathChanger.php");
echo '<div>';
$url = "http://xn--dkqp0gri91r38rn1wmlurtz.com/archives/37583450.html";
$doc = phpQuery::newDocumentFileHTML($url);
echo $doc[".zukanlist_bg01,.zukanlist_bg02"];
echo '</div>';
?>
</body>
</html>
の中にある表を全て取得するやり方は
$doc[".article-body-inner table"]
となります.
これを出力すると1つめに,あなたの取りたい表が表示されると思います.
よって,この1つめの表だけを出力するコードは
echo $doc[".article-body-inner table:eq(0)"];
となります.


前半で質問している人の文字化け対策をしても文字化けがなおりません。
2つ目のサイトが文字化けします。
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Webページ検索システム</title>
</head>
<body>
<h1>Webページ検索システム</h1>
<?php
require_once("phpQuery-onefile.php");
$url_1="http://www.nankai.co.jp/railinfo.html";
$url_2="https://trafficinfo.westjr.co.jp/kinki.html";
$html=file_get_contents($url_2);
mb_language('Japanese');
$doc_2=phpQuery::newDocument(mb_convert_encoding($html, 'HTML-ENTITIES', 'auto'));
$doc_1=phpQuery::newDocumentFileHTML($url_1);
echo '<h2>南海電鉄 運行状況</h2><br><br>';
echo $doc_1["#diainfo"].'<br><br>';
echo '<h2>JR西日本 運行状況</h2><br><br>';
echo $doc_2[".chiku_unko_info"].'<br><br>';
?>
</body>
</html>
上記のコードと同じように,$url_2も追加してください.
また,
「echo $doc_2[".chiku_unko_info"]->text().'<br><br>';」
にしてください.(->text()を追加です)
こちらで確認したところ,これで文字化けは解決しました.
上手くいかったらまた言ってください.
メジャー体験演習での課題なのですがどこをどう変えていいかわかりません。下記は授業で進めたところのプログラムです。画像になってしまいましたが添付した画像のどの部分を抽出すればよいのかを教えていただきたいです。
<?php
require_once("phpQuery-onefile.php");
require_once("pathChanger.php");
echo '<div>';
$url = "http://www.wakayama-u.ac.jp/";
$doc = phpQuery::newDocumentFileHTML($url);
echo '取得サイト:'.$doc['title']->text().'<br>';
echo $doc['.update>dd'];
echo '</div>';
echo '<div class="image-contents">';
$img = $doc['.bnrIndexDemand']->find('img');
$img = fullpath($img, $url);
echo $img;
echo'</div>';
取得サイトのシステムエラーがでてしまい、反映されません。
どこがおかしいのでしょうか。
二つ前と同じ質問です。すいません。
<!DOCTYPE html>
<html>
<head>
<meta charset="UFS-8">
<title>システム</title>
<style>
</style>
</head>
<body>
<h1>rrr</h1>
<?php
require_once("phpQuery-onefile.php");
require_once("pathChanger.php");
echo '<div>';
$url = "https://hlo.tohotheater.jp/net/movie/TNPI3090J01.do";
$doc = phpQuery::newDocumentFileHTML($url);
echo '取得サイト:'.$doc['title']->text().'<br>';
echo $doc['.section is-lv-02>movies movies-sp-separate ga_add'];
echo '</div>';
?>
</body>
</html>
なので,おそらくwebスクレイピングが禁止されているホームページだと思います.
他のサイトでwebスクレイピングしましょう...!
昨日質問したんですが、似たようなものをまねしてくださいと言われ、自分なりにやってみたのですが、うまくいきません。横並びにふたつのページを並べたいです。
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>チャンピオンズリーグ</title>
<style>
div {
float:
background:
width:
padding:
text-align:
border:
margin:
color:
}
.image-contents img {
min-width:
height:
}
body {
background:
background-image: url("./20170910-00075581-roupeiro-000-5-view.jpg");
}
table{
width: 100%;
}
.td_style{
border-right: dashed;
border-left: dashed;
width: 30%;
}
</style>
</head>
<body>
<h1>チャンピオンズリーグ<h1>
<?php
require_once("phpQuery-onefile.php");
require_once("pathChanger.php");
$url_1 = "https://www.soccer-king.jp/stats/world/cl/match";
$doc_1 = phpQuery::newDocumentFileHTML($url_1);
$url_2 = "https://soccer.yahoo.co.jp/ws/uefa/standings/41";
$doc_2 = phpQuery::newDocumentFileHTML($url_2);
echo '<table><tr>';
echo '<td class="td_style">';
echo '取得サイト:'.$doc_1['title']->text();
echo fullpath($doc_1[".contents-main"],$url_1);
echo '</td>';
echo '<td class="td_style">';
echo '取得サイト:'.$doc_2['title']->text();
echo fullpath($doc_2["#contentMain"],$url_2);
echo '</td>';
echo '</tr></table>';
?>
</body>
</html>
下から6行目と9行目を変更しています.
あとは,テーブル内のレイアウトをwidth:50%(2つなので)に変更しています.
------------
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>チャンピオンズリーグ</title>
<style>
div {
float:
background:
width:
padding:
text-align:
border:
margin:
color:
}
.image-contents img {
min-width:
height:
}
body {
background:
background-image: url("./20170910-00075581-roupeiro-000-5-view.jpg");
}
table{
width: 100%;
}
.td_style{
border-right: dashed;
border-left: dashed;
width: 50%;
}
</style>
</head>
<body>
<h1>チャンピオンズリーグ<h1>
<?php
require_once("phpQuery-onefile.php");
require_once("pathChanger.php");
$url_1 = "https://www.soccer-king.jp/stats/world/cl/match";
$doc_1 = phpQuery::newDocumentFileHTML($url_1);
$url_2 = "https://soccer.yahoo.co.jp/ws/uefa/standings/41";
$doc_2 = phpQuery::newDocumentFileHTML($url_2);
echo '<table><tr>';
echo '<td class="td_style">';
echo '取得サイト:'.$doc_1['title']->text().'<br>';
echo $doc_1[".contents-main"];
echo '<td class="td_style">';
echo '取得サイト:'.$doc_2['title']->text();
echo $doc_2["#contentMain"];
echo '</td>';
echo '</tr></table>';
?>
</body>
</html>


文字色とURLの色を白色にしたいのですが、うまくいかないです。
どこを変えたらいいでしょうか
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title> 編み物レシピ まとめ</title>
<style>
div{
.image-contents img {
min-width: 300px;
height: auto;
color: #EEEEEE;
}
link{ color:#FFFFFF;}//この辺に書いてます
color: #FFFFFF
}
body {
background-image: url("./12773118.jfif");
}
div {
.article {
display:block
border: 1px solid #CCCCCC;
margin: 15px 5px 10px 4px;
width:70px;
height:90px;
font-size:20px;
}
}
div {
.MdMTMWidgetList01{
display:block;
position:relative;
padding-bottom: 1px;
font-size:20px;
}
}
div {
.col-s6{
display: flex;
justify-content: space-between;
flex-wrap: wrap;
padding-bottom: 1px;
font-size:20px;
}
}
table{
width: 100%;
}
.td_style{
border-right: dashed;
border-left: dashed;
width: 30%;
}
</style>
</head>
<body>
<h1>編み物レシピ まとめ</h1>
<?php
require_once("phpQuery-onefile.php");
require_once("pathChanger.php");
$url_1 = "https://www.amuuse.jp/recipe/genre/knitting/";
$doc_1 = phpQuery::newDocumentFileHTML($url_1);
$url_2 = "https://matome.naver.jp/odai/2131818555139491301";
$doc_2 = phpQuery::newDocumentFileHTML($url_2);
$url_3 = "https://www.amuuse.jp/recipe/tool/knitting-crochet/?p=2&category%5B0%5D=%E6%A3%92%E9%87%9D%EF%BC%86%E3%81%8B%E3%81%8E%E9%87%9D ";
$doc_3 = phpQuery::newDocumentFileHTML($url_3);
echo '<table><tr>';
echo '<td class="td_style">';
echo '取得サイト:'.$doc_1['title']->text();
echo fullpath($doc_1[".col-m4"],$url_1);
echo '</td>';
echo '<td class="td_style">';
echo '取得サイト:'.$doc_2['title']->text();
echo fullpath($doc_2[".mdMTMWidget01Content01"],$url_2);
echo '</td>';
echo '<td class="td_style">';
echo '取得サイト:'.$doc_3['title']->text();
echo fullpath($doc_3[".col-s6.col-m4.match-height"],$url_3);
echo '</td>';
echo '</tr></table>';
?>
</body>
</html>
<style>
body{
background-image: url("./12773118.jfif");
color:#ffffff;
}
</style>
URLの色の設定も以下のサイトを確認してください.
<style>
a:link { color: #0000ff; }
a:visited { color: #000080; }
a:hover { color: #ff0000; }
a:active { color: #ff8000; }
</style>
https://www.tagindex.com/stylesheet/link/color.html


ありがとうございます!
背景の画像が表示されないです。回答お願いします。
<!DOCTYPE html>
<html>
<head>
<meta charest="UTF-8">
<title>ポケモン情報収集</title>
<style>
div {
float: left;
background: #ffffff;
width: 600px;
padding: 20px;
text-align: left;
border: 0px solid #cccccc;
margin: 15px 5px 10px 4px;
color: #000000;
}
body {
background: #f0f8ff;
background-image: url("./thN89ZGIZT.jpg");
}
</style>
</head>
<body>
<h1>ポケモン情報収集</h1>
<?php
require_once("phpQuery-onefile.php");
require_once("pathChanger.php");
echo '<div>';
$url = "https://gamewith.jp/pokemon-sword-shield/";
$doc = phpQuery::newDocumentFileHTML($url);
echo '取得サイト:'.$doc['title']->text().'<br>';
echo $doc['.article_outline'];
echo '</div>';
?>
<?php
require_once("phpQuery-onefile.php");
require_once("pathChanger.php");
echo '<div>';
$url = "https://game8.jp/pokemon-sword-shield/";
$doc = phpQuery::newDocumentFileHTML($url);
echo '取得サイト:'.$doc['title']->text().'<br>';
echo $doc['.menuItem-listItem'];
echo '</div>';
?>
</body>
</html>
こちらで,別の画像で代用したところ,背景はきちんと表示されました.
画像ファイルはexsi2019に入っているんですが
フォルダ内に画像ファイルはないですよ.
[yoshino@com sys]$ ls -la ./s246255/public_html/exsi2019
total 208
drwxr-xr-x 3 s246255 Students 4096 Dec 3 10:40 .
drwx---r-x 3 s246255 Students 4096 Dec 3 09:49 ..
-rwxr-xr-x 1 s246255 Students 7680 Nov 26 17:30 Thumbs.db
-rwxr-xr-x 1 s246255 Students 156 Nov 19 17:17 hello.html
-rwxr-xr-x 1 s246255 Students 4198 Nov 19 17:25 pathChanger.php
-rwxr-xr-x 1 s246255 Students 167314 Nov 19 17:25 phpQuery-onefile.php
-rwxr-xr-x 1 s246255 Students 1389 Dec 3 10:47 report.php
-rwxr-xr-x 1 s246255 Students 1583 Dec 3 09:54 type-a1.gif
drwxr-xr-x 2 s246255 Students 4096 Dec 3 10:40 ????
[yoshino@com sys]$ ls -la ./s246255/public_html/exsi2019


exsi2019に入れなおしました。ですが表示されないです。授業でつかった背景。type-a1.gifも表示されないです。
何度もすみません


ありがとうございます
何度も失礼しました
サイトの情報を取得したのですが、画像と文章が離れており、枠が何重にも表示されて非常に見にくいです。画像の近くに文章を表示させて、枠も一つにするにはどうすれば良いでしょうか?
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>ロックフェス新着情報</title>
<style>
body {
background-image:url("./headphone.jpg");
}
div {
float: left;
background: #ffffff;
width: 300px;
padding: 20px;
text-align: left;
border: 0px solid #cccccc;
margin: 15px 5px 10px 4px;
color: #ff9900;
}
</style>
</head>
<body>
<h1 style="background-image:url(orange.gif);padding-left:10px;padding-top:4px;">
<font color="#ffffff">ロックフェス新着情報
</font>
</h1>
<?php
require_once("phpQuery-onefile.php");
require_once("pathChanger.php");
echo '<div>';
echo "<h2>レディクレ</h2>";
$url = "https://radiocrazy.fm/";
$doc = phpQuery::newDocumentFileHTML($url);
echo '取得サイト:'.$doc['title']->text().'<br>';
$news = $doc['.news-list'];
echo fullpath($news["li"],$url);
echo '</div>';
?>
</body>
</html>
対策として一番外側のdiv要素にcontainerクラスを追加してそこに適応しています.
要素にcssを適用すると大量のタグに適用されてしまうため,クラス単位でcssを設定することをおすすめします.
///////////////////////////////////
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>ロックフェス新着情報</title>
<style>
body {
background-image:url("./headphone.jpg");
}
.container{
float: left;
background: #ffffff;
width: 300px;
padding: 20px;
text-align: left;
border: 0px solid #cccccc;
margin: 15px 5px 10px 4px;
color: #ff9900;
}
</style>
</head>
<body>
<h1 style="background-image:url(orange.gif);padding-left:10px;padding-top:4px;">
<font color="#ffffff">ロックフェス新着情報
</font>
</h1>
<?php
require_once("phpQuery-onefile.php");
require_once("pathChanger.php");
echo '<div class="container">'; //ここにcontainerクラスを追加(cssもdiv要素でなくcontainerクラスに適用)
echo "<h2>レディクレ</h2>";
$url = "https://radiocrazy.fm/";
$doc = phpQuery::newDocumentFileHTML($url);
echo '取得サイト:'.$doc['title']->text().'<br>';
$news = $doc['.news-list > li']; //news-listクラス配下のリスト(<li>)部分を取得
echo $news;
//echo fullpath($news["li"],$url); //上記で対応(想像通りの出力になっていなければ言ってください)
echo '</div>';
?>
</body>
</html>


$news = $doc['.news-list > li'];
にすると、サイトへ飛べなくなり、元サイトのimg altの部分が画像と重なって表示されます。そこで、echo fullpath($news["li"],$url);に直したら、サイトへも飛べるしaltも消えたのですが、画像とテキストの間隔がかなりあいてしまいました。どうすればよいでしょうか?


$news = $doc['.news-list'];
echo fullpath($news["li"],$url);
も
$news = $doc['.news-list > li'];
echo fullpath($news, $url);
も,書き方が違うだけでやってることは同じです.フルパス指定すれば同じ出力がされます.
しかし,フルパス指定では要素をそのまま全てもってきてしまうため,元サイトのCSSが適用されていることが前提の画像設定になります.(レスポンシブデザインのため)
よって['.news-list']のようにおおあじな取り方をすると元サイトと同じ複雑なCSS設定が必要となります.
もう少し細かい要素を取ってきて自分できれいに配置するか,元サイトのCSSを頑張って再現してください.


以前に出ていた、回答を参考にして自分で改造したところ何も表示しなくなりました。回答よろしくお願いします。
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title> Web情報収集システム s246235 </title>
<style>
div{
float: left;
background: #ffffff;
width: 900px;
padding: 20px;
text-align: left;
border: 1px solid #cccccc;
margin: 15px 5px 10px 4px;
color: #ff6600;
}
body{
background: #f0f8ff;
background-image: url("./main.png");
}
div {
.l-detail l-detail--summary{
display:block;
position:relative;
padding-bottom: 1px;
font-size:20px;
}
}
.td_style{
border-right: dashed;
border-left: dashed;
width: 30%;
}
</style>
</head>
<body>
<h1> 天月ニュース </h1>
<?php
require_once("phpQuery-onefile.php");
require_once("pathChanger.php");
echo'<div>';
$url_1 = "https://amatsuki.jp/contents/news";
$doc_1 = phpQuery::newDocumentFileHTML($url);
$url_2 = "https://rockinon.com/artist/7830";
$doc_2 = phpQuery::newDocumentFileHTML($url);
//trは,行列の「列」にあたります.列ごとに1つずつサイトの中身を入れています.
echo '<table><tr>';
echo '<td class="td_style">';
echo '天月ニュース:'.$doc_1['title']->text();
echo fullpath($doc_1[".list-unstyled"],$url_1);
echo '</td>';
echo '<td class="td_style">';
echo 'プロフィール:'.$doc_2['title']->text();
echo fullpath($doc_1[".c-summary-profile__block"],$url_1);
echo '</td>';
echo '<td class="td_style">';
echo '関連記事:'.$doc_2['title']->text();
echo fullpath($doc_2[".l-detail-left"],$url_2);
echo '</td>';
echo '</tr></table>';
?>
?>
</body>
</html>
下から4行目のところで,「?>」を2つ付けていることが原因だと思います.
こちらで試した結果,きちんと表示されましたが,上手くいかなかった場合にはまた聞いてください.
インデント(改行)を変えて見やすくした方がミスに気づきやすいと思います.下記に訂正したコードを貼っておくので,参考にしてください.
-----------
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title> Web情報収集システム s246235 </title>
<style>
div{
float: left;
background: #ffffff;
width: 900px;
padding: 20px;
text-align: left;
border: 1px solid #cccccc;
margin: 15px 5px 10px 4px;
color: #ff6600;
}
body{
background: #f0f8ff;
background-image: url("./main.png");
}
div {
.l-detail l-detail--summary{
display:block;
position:relative;
padding-bottom: 1px;
font-size:20px;
}
}
.td_style{
border-right: dashed;
border-left: dashed;
width: 30%;
}
</style>
</head>
<body>
<h1> 天月ニュース </h1>
<?php
require_once("phpQuery-onefile.php");
require_once("pathChanger.php");
echo'<div>';
$url_1 = "https://amatsuki.jp/contents/news";
$doc_1 = phpQuery::newDocumentFileHTML($url);
$url_2 = "https://rockinon.com/artist/7830";
$doc_2 = phpQuery::newDocumentFileHTML($url);
//trは,行列の「列」にあたります.列ごとに1つずつサイトの中身を入れています.
echo '<table><tr>';
echo '<td class="td_style">';
echo '天月ニュース:'.$doc_1['title']->text();
echo fullpath($doc_1[".list-unstyled"],$url_1);
echo '</td>';
echo '<td class="td_style">';
echo 'プロフィール:'.$doc_2['title']->text();
echo fullpath($doc_1[".c-summary-profile__block"],$url_1);
echo '</td>';
echo '<td class="td_style">';
echo '関連記事:'.$doc_2['title']->text();
echo fullpath($doc_2[".l-detail-left"],$url_2);
echo '</td>';
echo '</tr></table>';
?>
</body>
</html>
失礼しました.
これは改善するのが難しいのでしょうか?
$url_1 = "https://amatsuki.jp/contents/news";
$doc_1 = phpQuery::newDocumentFileHTML($url);
$url_2 = "https://rockinon.com/artist/7830";
$doc_2 = phpQuery::newDocumentFileHTML($url);
この部分は「phpQuery::newDocumentFileHTML($url)」ではなく「phpQuery::newDocumentFileHTML($url_1);」と「phpQuery::newDocumentFileHTML($url_2);」
ではないでしょうか?
その部分はもう変更されましたか?


下記のコードを入れるとスクレイピングできると思います.
echo fullpath($doc_2[".c-article-middle"],$url_2);


画像を取ろうとしてforeach文を使ったんですが、使うと今まで表示されていたものも表示されなくなりました。おそらくそれに関するエラーも出たんですが何が書いてあるかわかりませんでした。
<!DOCTYPE html>
<html>
<head>
<meta charest="UTF-8">
<title>情報収集システム</title>
<style>
div {
float: left;
background: #ffffff;
width: 600px;
padding: 20px;
text-align: left;
border: 0px solid #cccccc;
margin: 15px 5px 10px 4px;
color: #ff6600;
}
.image-contents img {
min-width: 300px
height: auto;
}
body {
background: #f0f8ff;
background-image: url("./thN89ZGIZT.jpg");
}
</style>
</head>
<body>
<h1>情報収集システム</h1>
<?php
require_once("phpQuery-onefile.php");
require_once("pathChanger.php");
echo '<div>';
$url = "https://gamewith.jp/pokemon-sword-shield/";
$doc = phpQuery::newDocumentFileHTML($url);
echo '取得サイト:'.$doc['title']->text().'<br>';
$data = $doc['._item'];
foreach($data as $row){
echo pq($row)->find('.media_left _thumbnail is-top')->find('img');
}
echo '</div>';
echo '<div class="image-contents">';
$img = $doc['.bnrIndexDemand']->find('img');
$img = fullpath($img, $url);
echo $img;
echo '</div>';
require_once("phpQuery-onefile.php");
require_once("pathChanger.php");
echo '<div>';
$url = "https://gamewith.jp/pokemon-sword-shield/";
$doc = phpQuery::newDocumentFileHTML($url);
echo '取得サイト:'.$doc['title']->text().'<br>';
$data = $doc['._item'];
$count = 1;
foreach($data as $row){
echo pq($row)->find('img').'<br>';
$count = $count + 1;
}
?>
返事が遅れて申し訳ありません.
foreachならこのような感じで表示できると思います.
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title> ドラマニュース</title>
<style>
div {
.return.false {
display:block
border: 1px solid #CCCCCC;
margin: 15px 5px 10px 4px;
width:70px;
height:90px;
font-size:20px;
}
}
div {
.articleArea{
display:block;
position:relative;
padding-bottom: 1px;
font-size:20px;
}
}
div {
.listVisual {
display: flex;
justify-content: space-between;
flex-wrap: wrap;
font-size:20px;
}
}
table{
width: 100%;
}
.td_style{
border-right: dashed;
border-left: dashed;
width: 30%;
}
</style>
</head>
<body>
<h1>ドラマニュース</h1>
<?php
require_once("phpQuery-onefile.php");
require_once("pathChanger.php");
$url_1 = "https://www.oricon.co.jp/news/tag/id/drama/";
$html=file_get_contents($url_1);
mb_language('Japanese');
$doc_1=phpQuery::newDocument(mb_convert_encoding($html, 'HTML-ENTITIES', 'auto')); //1つめのサイト
$url_2 = "https://www.nikkansports.com/entertainment/drama/news/";
$doc_2 = phpQuery::newDocumentFileHTML($url_2);
$url_3 = "https://thetv.jp/news/drama/";
$doc_3 = phpQuery::newDocumentFileHTML($url_3);
echo '<table><tr>';
echo '<td class="td_style">';
echo '取得サイト:'.$doc_1['title']->text();
echo fullpath($doc_1[".card-body-main"],$url_1);
echo '</td>';
echo '<td class="td_style">';
echo '取得サイト:'.$doc_2['title']->text();
echo fullpath($doc_2[".articleArea"],$url_2);
echo '</td>';
echo '<td class="td_style">';
echo '取得サイト:'.$doc_3['title']->text();
echo fullpath($doc_3[".listContent.newsList"],$url_3);
echo '</td>';
echo '</tr></table>';
?>
</body>
</html>
二つ目、三つ目のサイトが表示されないです。
どこが間違っていますか。
わりと深い階層にあるidを指定しています.
---------
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title> ドラマニュース</title>
<style>
div {
.return.false {
display:block
border: 1px solid #CCCCCC;
margin: 15px 5px 10px 4px;
width:70px;
height:90px;
font-size:20px;
}
}
div {
.articleArea{
display:block;
position:relative;
padding-bottom: 1px;
font-size:20px;
}
}
div {
.listVisual {
display: flex;
justify-content: space-between;
flex-wrap: wrap;
font-size:20px;
}
}
table{
width: 100%;
}
.td_style{
border-right: dashed;
border-left: dashed;
width: 30%;
}
</style>
</head>
<body>
<h1>ドラマニュース</h1>
<?php
require_once("phpQuery-onefile.php");
require_once("pathChanger.php");
$url_1 = "https://www.oricon.co.jp/news/tag/id/drama/";
$html=file_get_contents($url_1);
mb_language('Japanese');
$doc_1=phpQuery::newDocument(mb_convert_encoding($html, 'HTML-ENTITIES', 'auto')); //1つめのサイト
$url_2 = "https://www.nikkansports.com/entertainment/drama/news/";
$doc_2 = phpQuery::newDocumentFileHTML($url_2);
$url_3 = "https://thetv.jp/news/drama/";
$doc_3 = phpQuery::newDocumentFileHTML($url_3);
echo '<table><tr>';
echo '<td class="td_style">';
echo '取得サイト:'.$doc_1['title']->text();
echo fullpath($doc_1[".card-body-main"],$url_1);
echo '</td>';
echo '<td class="td_style">';
echo '取得サイト:'.$doc_2['title']->text();
echo fullpath($doc_2[".newslist"],$url_2);
echo '</td>';
echo '<td class="td_style">';
echo '取得サイト:'.$doc_3['title']->text();
echo fullpath($doc_3[".listItem"],$url_3);
echo '</td>';
echo '</tr></table>';
?>
</body>
</html>
文字化けします。どう変更したらいいですか。
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title></title>
<style>
div {
float: left;
background: #ffffff;
width: 100px;
height:120px
padding: 20px;
text-align: left;
border: 1px solid #cccccc;
margin: 15px 5px 10px 4px;
color: #ff6677
}
body{
background: #f0f8ff;
background-image: url("./aaa.jfif")
}
</style>
</head>
<body>
<h1></h1>
<?php
require_once("phpQuery-onefile.php");
require_once("pathChanger.php");
$url = "https://news.livedoor.com/topics/category/ent/";
mb_language('Japanese');//
$doc = phpQuery::newDocumentFileHTML($url);
///html/body/div[2]/div[2]
$news = $doc["#content"];
echo "<div>";
echo $news;
echo "</div>";
?>
</body>
</html>
質問をする前に,同じような質問がないか掲示板内検索して確認してください.(検索ボタンから「文字化け」で検索するなど)


英語の記事を抜粋したのですが、表示された時に和訳することは可能ですか?
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Web情報収集システム</title>
<style>
.image-contents img {
min-width: 300px;
height: auto;
}
body {
background: #f0f8ff;
}
</style>
</head>
<body>
<h1>AINEWSより最新情報を抜粋</h1>
<h2>あなたの気になるAIに関する記事が見つかるはずです! 作成者 KOMI SUZUKI</h2>
<h3>((英語の勉強にもなると思いますよ))
<?php
require_once("phpQuery-onefile.php");
require_once("pathChanger.php");
$url = "https://artificialintelligence-news.com/";
$doc = phpQuery::newDocumentFileHTML($url);
$news = $doc["#home-mid-wrap:eq(0)"];
echo "<div>";
echo $news;
echo fullpath($news["li"],$url);
echo "</div>";
?>
</body>
</html>
この掲示板でやり方を全て聞くのはなしね.
応用部分は,自分である程度作ってみましょう.
かなりつくって,あと少しで出来ない場合のサポートって感じで利用して下さい.


プログラムのサンプルの少し高度な例1を参考にして、駅と時間を設定してダイヤを検索するプログラムを書いたのですが、ダイヤの検索結果が表示されません。どうすればよいのでしょうか。(プログラムが長くて申し訳ないです)
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>web情報収集システム</title>
</head>
<body>
<h1>web情報収集システム</h1>
<?php
echo "<div>";
echo '<form method = "POST" action = "#" >';
echo '出発:<input type = "text" name = "start" size = "15">';
echo '到着:<input type = "text" name = "last" size = "15">';
echo '日時:<select name="y">';
echo '<option value="2019" selected>2019年</option>';
echo '<option value="2020" >2020年</option>';
echo "</select>";
echo '<select name="m">';
echo '<option value="1" selected>1月</option>';
echo '<option value="2">2月</option>';
echo '<option value="3">3月</option>';
echo '<option value="4">4月</option>';
echo '<option value="5">5月</option>';
echo '<option value="6">6月</option>';
echo '<option value="7">7月</option>';
echo '<option value="8">8月</option>';
echo '<option value="9">9月</option>';
echo '<option value="10">10月</option>';
echo '<option value="11">11月</option>';
echo '<option value="12">12月</option>';
echo "</select>";
echo '<select name="d">';
echo '<option value="01" selected>1日</option>';
echo '<option value="02" >2日</option>';
echo '<option value="03" >3日</option>';
echo '<option value="04" >4日</option>';
echo '<option value="05" >5日</option>';
echo '<option value="06" >6日</option>';
echo '<option value="07" >7日</option>';
echo '<option value="08" >8日</option>';
echo '<option value="09" >9日</option>';
echo '<option value="10" >10日</option>';
echo '<option value="11" >11日</option>';
echo '<option value="12" >12日</option>';
echo '<option value="13" >13日</option>';
echo '<option value="14" >14日</option>';
echo '<option value="15" >15日</option>';
echo '<option value="16" >16日</option>';
echo '<option value="17" >17日</option>';
echo '<option value="18" >18日</option>';
echo '<option value="19" >19日</option>';
echo '<option value="20" >20日</option>';
echo '<option value="21" >21日</option>';
echo '<option value="22" >22日</option>';
echo '<option value="23" >23日</option>';
echo '<option value="24" >24日</option>';
echo '<option value="25" >25日</option>';
echo '<option value="26" >26日</option>';
echo '<option value="27" >27日</option>';
echo '<option value="28" >28日</option>';
echo '<option value="29" >29日</option>';
echo '<option value="30" >30日</option>';
echo '<option value="31" >31日</option>';
echo "</select>";
echo '<select name="h">';
echo '<option value="0">0時</option>';
echo '<option value="1" selected>1時</option>';
echo '<option value="2">2時</option>';
echo '<option value="3">3時</option>';
echo '<option value="4">4時</option>';
echo '<option value="5">5時</option>';
echo '<option value="6">6時</option>';
echo '<option value="7">7時</option>';
echo '<option value="8">8時</option>';
echo '<option value="9">9時</option>';
echo '<option value="10">10時</option>';
echo '<option value="11">11時</option>';
echo '<option value="12">12時</option>';
echo '<option value="13">13時</option>';
echo '<option value="14">14時</option>';
echo '<option value="15">15時</option>';
echo '<option value="16">16時</option>';
echo '<option value="17">17時</option>';
echo '<option value="18">18時</option>';
echo '<option value="19">19時</option>';
echo '<option value="20">20時</option>';
echo '<option value="21">21時</option>';
echo '<option value="22">22時</option>';
echo '<option value="23">23時</option>';
echo "</select>";
echo '<select name="mm">';
echo '<option value="00" selected>0分</option>';
echo '<option value="01">1分</option>';
echo '<option value="02">2分</option>';
echo '<option value="03">3分</option>';
echo '<option value="04">4分</option>';
echo '<option value="05">5分</option>';
echo '<option value="06">6分</option>';
echo '<option value="07">7分</option>';
echo '<option value="08">8分</option>';
echo '<option value="09">9分</option>';
echo '<option value="10">10分</option>';
echo '<option value="11">11分</option>';
echo '<option value="12">12分</option>';
echo '<option value="13">13分</option>';
echo '<option value="14">14分</option>';
echo '<option value="15">15分</option>';
echo '<option value="16">16分</option>';
echo '<option value="17">17分</option>';
echo '<option value="18">18分</option>';
echo '<option value="19">19分</option>';
echo '<option value="20">20分</option>';
echo '<option value="21">21分</option>';
echo '<option value="22">22分</option>';
echo '<option value="23">23分</option>';
echo '<option value="24">24分</option>';
echo '<option value="25">25分</option>';
echo '<option value="26">26分</option>';
echo '<option value="27">27分</option>';
echo '<option value="28">28分</option>';
echo '<option value="29">29分</option>';
echo '<option value="30">30分</option>';
echo '<option value="31">31分</option>';
echo '<option value="32">32分</option>';
echo '<option value="33">33分</option>';
echo '<option value="34">34分</option>';
echo '<option value="35">35分</option>';
echo '<option value="36">36分</option>';
echo '<option value="37">37分</option>';
echo '<option value="38">38分</option>';
echo '<option value="39">39分</option>';
echo '<option value="40">40分</option>';
echo '<option value="41">41分</option>';
echo '<option value="42">42分</option>';
echo '<option value="43">43分</option>';
echo '<option value="44">44分</option>';
echo '<option value="45">45分</option>';
echo '<option value="46">46分</option>';
echo '<option value="47">47分</option>';
echo '<option value="48">48分</option>';
echo '<option value="49">49分</option>';
echo '<option value="50">50分</option>';
echo '<option value="51">51分</option>';
echo '<option value="52">52分</option>';
echo '<option value="53">53分</option>';
echo '<option value="54">54分</option>';
echo '<option value="55">55分</option>';
echo '<option value="56">56分</option>';
echo '<option value="57">57分</option>';
echo '<option value="58">58分</option>';
echo '<option value="59">59分</option>';
echo "</select>";
echo '<input type = "submit" name = "search" value = "検索する" />';
echo "</form>";
$start_station = $_POST['start'];
$last_stastion = $_POST['last'];
$year = $_POST['y'];
$month = $_POST['m'];
$day = $_POST['d'];
$hour = $_POST['h'];
$minute = $_POST['mm'];
require_once('phpQuery-onefile.php');
$start_station = urlencode($start_station);
$last_station = urlencode($last_station);
$year = urlencode($year);
$month = urlencode($month);
$day = urlencode($day);
$hour = urlencode($hour);
$minute = urlencode($minutr);
$url = 'https://transit.yahoo.co.jp/search/result?flatlon=&from='.$start_station.'&tlatlon=&to='.$last_station.'&via=&via=&via=&y='.$year.'&m='.$month.'&d='.$day.'&hh='.$hour.'&mm='.$minute.'&type=1&ticket=ic&expkind=1&ws=3&s=0&al=1&shin=1&ex=1&hb=1&lb=1&sr=1&kw=%E5%92%8C%E6%AD%8C%E5%B1%B1%E5%A4%A7%E5%AD%A6%E5%89%8D';
$doc = phpQuery::newDocumentFileHTML($url);
echo '<div id="train">';
echo $doc['#route01']->find('.routeDetail');
echo '</div>';
?>
</body>
</html>
$last_stastion = $_POST['last'];
を
$last_station = $_POST['last'];
になおしてください.


画像が出てこないのですが、どうしたら出てくるようになるでしょうか。また、リンク先にも飛べるようにしたいのですが、それについても教えていただけますか。
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>和歌山温泉</title>
<style>
div{
float:;
background: #ffffff;
width: 550px;
padding: 20px;
text-align:;
border: ;
margin: 5px 4px;
color: #ff6600;
}
.image-contents img {
min-width: 300px;
height: auto;
}
body {
background: #f0f8ff;
}
body{
background: #f0f8ff;
background-image: url("./download.png");
}
</style>
</head>
<body>
<h1>和歌山温泉リスト</h1>
<?php
require_once("phpQuery-onefile.php");
require_once("pathChanger.php");
$url = "https://sp.jorudan.co.jp/onsen/wakayama/";
$doc = phpQuery::newDocumentFileHTML($url);
$img = $doc['.item-list']->find('article');
echo "<div>";
echo $img;
echo "</div>";
?>
</body>
</html
$img = fullpath($img,$url);
この1行を加えてもらえれば画像が表示されるはずです.
確認してみてください!


こんな感じに書いてください.
$url = "https://sp.jorudan.co.jp/onsen/wakayama/";
$doc = phpQuery::newDocumentFileHTML($url);
$img = $doc['.item-list']->find('article');
$img = fullpath($img,$url);
echo "<div>";
echo $img;
echo "</div>";

