質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Anaconda

Anacondaは、Python本体とPythonで利用されるライブラリを一括でインストールできるパッケージです。環境構築が容易になるため、Python開発者間ではよく利用されており、商用目的としても利用できます。

Beautiful Soup

Beautiful Soupは、Pythonのライブラリの一つ。スクレイピングに特化しています。HTMLデータの構文の解析を行うために、HTMLタグ/CSSのセレクタで抽出する部分を指定することが可能です。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

selenium

Selenium(セレニウム)は、ブラウザをプログラムで作動させるフレームワークです。この原理を使うことにより、ブラウザのユーザーテストなどを自動化にすることができます。

Q&A

解決済

1回答

449閲覧

クローリングで検索ボックス入力後のスクレイピングの操作

53243

総合スコア6

Anaconda

Anacondaは、Python本体とPythonで利用されるライブラリを一括でインストールできるパッケージです。環境構築が容易になるため、Python開発者間ではよく利用されており、商用目的としても利用できます。

Beautiful Soup

Beautiful Soupは、Pythonのライブラリの一つ。スクレイピングに特化しています。HTMLデータの構文の解析を行うために、HTMLタグ/CSSのセレクタで抽出する部分を指定することが可能です。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

selenium

Selenium(セレニウム)は、ブラウザをプログラムで作動させるフレームワークです。この原理を使うことにより、ブラウザのユーザーテストなどを自動化にすることができます。

0グッド

0クリップ

投稿2022/01/19 09:26

前提・実現したいこと

ITmediaのサイトで検索ボックスで[AI]と入力後、
記事のタイトルとURLが取得できなくて困っています。
参考URL:リンク内容

発生している問題・エラーメッセージ

該当のソースコード

python

1from bs4 import BeautifulSoup 2from time import sleep 3from selenium import webdriver 4from selenium.webdriver.common.keys import Keys 5 6 7 8options = webdriver.ChromeOptions() 9options.add_argument('--headless') 10#options.add_argument('--incognito') 11 12driver = webdriver.Chrome( 13 executable_path='/Users/genge/Desktop/python_practice/tools/chromedriver_win32/chromedriver.exe', 14 options=options 15) 16driver.implicitly_wait(10) 17driver.get('https://www.itmedia.co.jp/news/') 18 19search_box = driver.find_element_by_css_selector('.searchQuery') 20sleep(3) 21 22search_box.send_keys('AI') 23soup = BeautifulSoup(driver.page_source, 'lxml') 24sleep(3) 25search_box.submit() 26a_tags = soup.select('.resultTitle') 27sleep(3) 28for i, a_tag in enumerate(a_tags): 29 print('='*30, i, '='*30) 30 print(a_tag.select_one('a').text) 31 print(a_tag.select_one('a').get('href')) 32 sleep(2) 33driver.quit()

試したこと

検索ボックスを入力してもURLに変化がなかったためそれが原因だと考えられますが
自分では解決には至りませんでした。

補足情報(FW/ツールのバージョンなど)

すいませんがエラーコードは文字数が原因で表示できませんでした。
ご自身で実行していただけたら幸いです。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

ITmedia の記事を検索するための API が存在します(この API を使用して検索結果のページが構成されています)。ただし、persistedsiteIds の値は一定のタイミングで変更されるものと思われます。

python

1import requests 2import json 3 4search_url = 'https://api.cxense.com/document/search' 5search_word = 'AI' 6params = { 7 'callback': 'setData', 8 'persisted': '26eb63f6ccb536648d4d164f4344c8c63c11c62f', 9 'json': '''{{ 10 "siteIds":["1146327961620383921"], 11 "resultFields": [ 12 "title", "url" 13 ], 14 "sort": [ 15 {{ 16 "type": "string", 17 "field": "itm-meta-articleid", 18 "order": "descending" 19 }} 20 ], 21 "query": "query(url:\\"articles\\") and query(title_shingle^5,description^3,body_shingle^1:\\"{}\\") and not query(url:\\"image.itmedia\\") and not query(url:\\"/qa/\\") and not query(url:\\"keywords\\") and not query(url:\\"kw\\") and not query(url:\\"subtop\\") and not query(url:\\"release\\") and not query(url:\\"_\\") and not query(itm-meta-keywords:\\"過去記事\\")", 22 "count": 100 23 }}'''.format(search_word) 24} 25 26# get JSON text 27r = requests.get(search_url, params=params) 28json_text = r.text 29start = json_text.rindex('setData') 30json_text = json_text[start+8:-1] 31data_dict = json.loads(json_text)['response']['matches'] 32 33# extract title 34data = [] 35for d in data_dict: 36 data.append({i['field']: i['value'] for i in d['fields']}) 37 38# show result 39from pprint import pprint 40pprint(data[:10]) 41 42# 43[{'title': '雑誌・書籍読み放題からソフトサブスク、クリエイターパトロンまで、何使ってる?', 44 'url': 'https://www.itmedia.co.jp/news/articles/2201/19/news141.html'}, 45 {'title': 'ITエンジニアが選ぶ、おすすめビジネス書・技術書ベスト10 翔泳社が発表', 46 'url': 'https://www.itmedia.co.jp/news/articles/2201/19/news104.html'}, 47 {'title': 'Samsung、フラグシップSoC「Exynos 2200」発表 AMDのアキテクチャ採用GPU搭載', 48 'url': 'https://www.itmedia.co.jp/news/articles/2201/19/news087.html'}, 49 {'title': '第3世代iPhone SEがもうすぐ? EECに新しいiPhoneとiPad情報が登録される', 50 'url': 'https://www.itmedia.co.jp/news/articles/2201/19/news079.html'}, 51 {'title': '2022年春にiPad Air新モデル発表? 次期iPhone SEと同時か', 52 'url': 'https://www.itmedia.co.jp/news/articles/2201/17/news145.html'}, 53 {'title': '2021年、上場企業が漏えいした個人情報は574万人分 事故件数や社数は過去最多に', 54 'url': 'https://www.itmedia.co.jp/news/articles/2201/17/news129.html'}, 55 {'title': '保険各社、競う支払い迅速化 広がるAI活用', 56 'url': 'https://www.itmedia.co.jp/news/articles/2201/17/news062.html'}, 57 {'title': '米国では「Log4j」脆弱性の放置に法的措置も 攻撃に引き続き警戒を呼び掛け', 58 'url': 'https://www.itmedia.co.jp/news/articles/2201/17/news058.html'}, 59 {'title': '米バイデン政権、「Log4j」問題などを受けGAFAやOpenSSFなどを招いたOSSセキュリティ会議開催', 60 'url': 'https://www.itmedia.co.jp/news/articles/2201/14/news124.html'}, 61 {'title': '駐車場にもキャッシュレス化の波 コロナ対策 スマホで支払い、集金省力化', 62 'url': 'https://www.itmedia.co.jp/news/articles/2201/14/news065.html'}]

投稿2022/01/19 13:58

melian

総合スコア19803

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問