スクリプトは結果のサブセットを表示するbase_url
からすべてのリンクを取得することになっています。スクロールすると、リストが使い果たされるまでさらに多くの結果がサブセットに追加されます。私はそれを行うことができますが、問題は、スクロールを実行せずにWebページが表示されたときに最初に読み込まれる数少ないリンクのみを取得できることです。レスポンスは、Webドライバによるスクロールと並行して更新できるはずです。しかし、これはこれまでの私のコードです。セレンのスクロールで応答が更新されない
import re
import requests
import time
from bs4 import BeautifulSoup
from selenium import webdriver
mybrowser = webdriver.Chrome("E:\chromedriver.exe")
base_url = "https://genius.com/search?q="+"drake"
myheader = {'User-Agent':''}
mybrowser.get(base_url)
t_end = time.time() + 60 * 1
while(time.time()<t_end):
mybrowser.execute_script("window.scrollTo(0, document.body.scrollHeight);")
response = requests.get(base_url, headers = myheader)
soup = BeautifulSoup(response.content, "lxml")
pattern = re.compile("[\S]+-lyrics$")
for link in soup.find_all('a',href=True):
if pattern.match(link['href']):
print (link['href'])
最初の数個のリンクのみが表示されます。セレンがページをスクロールしたときに読み込まれるリンクは取得されません。
ここでWebページをダウンロードする要求を使用していますが、代わりにセレンからフェッチしてください。 – Rishav
@Rishav問題は内部的にURLを更新するajaxリクエストです。 'http://genius.com/?page=i(1-50..60 ... n)&& q = drake'のように – pythonlearn