リンクに移動してJavascriptコンテンツが読み込まれるのを待つWebクローラーを作成しようとしています。次に、次のページに進む前に、リストされた記事へのすべてのリンクを取得する必要があります。問題は、最初のURL( "https://techcrunch.com/search/heartbleed")から私が与えたものに従うのではなく、いつも擦ってしまうことです。なぜ私はreqeustsで渡された新しいURLから次のコードを削り取らないのですか?見つかったすべてのリンクにPython Scrapy - Selenium - 次のページをリクエストしています
for elem in hreflist :
print(elem)
yield scrapy.Request(url=elem , callback=self.parse_content)
このコード降伏scrapy要求:私は
import scrapy
from scrapy.http.request import Request
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC
from selenium.common.exceptions import TimeoutException
from selenium.webdriver.support.ui import WebDriverWait
import time
class TechcrunchSpider(scrapy.Spider):
name = "techcrunch_spider_performance"
allowed_domains = ['techcrunch.com']
start_urls = ['https://techcrunch.com/search/heartbleed']
def __init__(self):
self.driver = webdriver.PhantomJS()
self.driver.set_window_size(1120, 550)
#self.driver = webdriver.Chrome("C:\Users\Daniel\Desktop\Sonstiges\chromedriver.exe")
self.driver.wait = WebDriverWait(self.driver, 5) #wartet bis zu 5 sekunden
def parse(self, response):
start = time.time() #ZEITMESSUNG
self.driver.get(response.url)
#wartet bis zu 5 sekunden(oben definiert) auf den eintritt der condition, danach schmeist er den TimeoutException error
try:
self.driver.wait.until(EC.presence_of_element_located(
(By.CLASS_NAME, "block-content")))
print("Found : block-content")
except TimeoutException:
self.driver.close()
print(" block-content NOT FOUND IN TECHCRUNCH !!!")
#Crawle durch Javascript erstellte Inhalte mit Selenium
ahref = self.driver.find_elements(By.XPATH,'//h2[@class="post-title st-result-title"]/a')
hreflist = []
#Alle Links zu den jeweiligen Artikeln sammeln
for elem in ahref :
hreflist.append(elem.get_attribute("href"))
for elem in hreflist :
print(elem)
yield scrapy.Request(url=elem , callback=self.parse_content)
#Den link fuer die naechste seite holen
try:
next = self.driver.find_element(By.XPATH,"//a[@class='page-link next']")
nextpage = next.get_attribute("href")
print("JETZT KOMMT NEXT :")
print(nextpage)
#newresponse = response.replace(url=nextpage)
yield scrapy.Request(url=nextpage, dont_filter=False)
except TimeoutException:
self.driver.close()
print(" NEXT NOT FOUND(OR EOF) IM CLOSING MYSELF !!!")
end = time.time()
print("Time elapsed : ")
finaltime = end-start
print(finaltime)
def parse_content(self, response):
title = self.driver.find_element(By.XPATH,"//h1")
titletext = title.get_attribute("innerHTML")
print(" h1 : ")
print(title)
print(titletext)
私はparse_contentにself.driver.get(...)を追加したので、今すぐh1-titleを取得できます。それでも、次のページに続くことはできません。セレンコードで歩留まりをどのように置き換えるべきですか?例がありますか?私は非常に治療やセレンを経験していません。ありがとう! – BlackBat
関数の内容で 'yield scrapy.Request(url = elem、callback = self.parse_content)の行を置き換えてみてください。* parse_content * next_pageの問題では、解析機能(**の間に**次のページがある、smthgをする) – Pablo