2017-04-07 62 views
1

該腳本應該獲取base_url的所有鏈接,該鏈接顯示結果的子集,並且向下滾動時會將更多結果添加到子集,直到列表用盡。我能夠做到這一點,但問題是,我只能夠檢索只有當網頁出現時加載最初加載而沒有執行任何滾動的少數鏈接。響應應該能夠隨網頁驅動程序一起更新。不過,這是我的代碼。響應無法通過selenium滾動更新

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']) 

只顯示前幾個鏈接。不會檢索硒滾動頁面時加載的鏈接。

+0

您正在使用請求下載網頁,而不是從硒取回。 – Rishav

+0

@Rishav問題是在內部更新URL的ajax請求。像'http://genius.com/?page=i(1-50..60 ... n)&& q = drake' – pythonlearn

回答

1

您需要從Selenium本身解析HTML(Selenium滾動網頁時會發生變化),並且不會使用請求下載頁面。

變化:

response = requests.get(base_url, headers = myheader) 
soup = BeautifulSoup(response.content, "lxml") 

到:

html = mybrowser.page_source 
soup = BeautifulSoup(html, "lxml") 

它應該只是罰款。

+0

如何將這些URL附加到文件? – pythonlearn

+0

@pythonlearn mybrowser.current_url' – Rishav

+0

'file.write(link ['href'])'不起作用? – pythonlearn