selenium scrapy 에서 의 사용 코드
사용 목적
왕 이 뉴스의 국내,국제,군사,항공 4 면 을 탈취 한 뉴스.테스트 에서 각 판 의 뉴스 가 동적 으로 불 러 온 것 을 발 견 했 습 니 다.직접 기어 가서 가 져 올 수 없 으 면 selenium 을 사용 하여 이 부분의 데 이 터 를 가 져 오 는 데 도움 을 줍 니 다.
코드
spider
import scrapy
from selenium import webdriver
from wangyiPro.items import WangyiproItem
class WangyiSpider(scrapy.Spider):
name = 'wangyi'
# allowed_domains = ['www.xxx.com']
start_urls = ['https://news.163.com/']
model_url = []
hro = webdriver.Chrome()
def parse(self, response):
# 4
li_list = response.xpath('/html/body/div[1]/div[1]/div[2]/div[2]/div[2]/div[2]/div/ul/li')
indexs = [3,4,6,7]
for index in indexs:
model_li = li_list[index]
model_list = model_li.xpath('./a/@href').extract_first()
self.model_url.append(model_list)
for url in self.model_url:
yield scrapy.Request(url=url,callback=self.parse_model)
# : + url( )
def parse_model(self,response):
# response ( )
#
# ,
div_list = response.xpath('/html/body/div/div[3]/div[4]/div[1]/div[1]/div/ul/li/div/div')
for div in div_list:
title = div.xpath('./div/div[1]/h3/a/text()').extract_first()
new_url_detail = div.xpath('./div/div[1]/h3/a/@href').extract_first()
if new_url_detail:
item = WangyiproItem()
item['title'] = title
yield scrapy.Request(url=new_url_detail,callback=self.parse_detail,meta={'item':item})
def parse_detail(self,response):
# ,
content = response.xpath('/html/body/div[3]/div[1]/div[3]/div[2]/p/text()').extract()
content = ''.join(content)
item = response.meta['item']
item['content'] = content
yield item
# ,
def closed(self,spider):
# selenium
self.hro.quit()
middlewares
from time import sleep
from scrapy.http import HtmlResponse#scrapy
class WangyiproDownloaderMiddleware:
def process_request(self, request, spider):
return None
#
# :1+4+n
def process_response(self, request, response, spider):
# 4
if request.url in spider.model_url:
hro = spider.hro
hro.get(request.url)
sleep(2)
# ,
hro.execute_script('window.scrollTo(0,document.body.scrollHeight)')
sleep(1)
page_text = hro.page_source
# response.text = page_text
#
return HtmlResponse(url=request.url,body=page_text,encoding='utf-8',request=request)
# ,
else:
return response
def process_exception(self, request, exception, spider):
pass
효과.총결산
hro = webdriver.Chrome()
저 는 Chromedriver 를 설정 파일 에 직접 기록 하기 때문에 대상 을 직접 예화 하면 됩 니 다.설정 파일 을 쓰 지 않 으 면hro = webdriver.Chrome(executable_path=' ')
로 쓰 십시오.Chromedriver 를 pycharm 파일 에 상대 경 로 를 기록 하려 고 시 도 했 지만 성공 하지 못 했 습 니 다.이상 은 selenium 이 scrapy 에서 어떻게 사용 하 는 지 에 대한 상세 한 내용 입 니 다.scrapy 에서 selenium 을 사용 하 는 지 에 관 한 자 료 는 다른 관련 글 에 주목 하 세 요!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
scrapy에서 쿠키를 적용하는 방법을 설정하는 방법 (3가지)본인은python3.6입니다. 전체적으로 말하자면 scrapy 프레임워크에 쿠키를 설정하는 데는 세 가지 방식이 있다. 첫 번째: 설정 파일에 쿠키 설정 COOKIES_ENABLED가 주석일 때 scrapy는 기본적...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.