Я работаю над Scrapy от 2 до 3 недель со следующими зависимостями:
- Python 2.7
- Витая 17.9.0
- Lxml 4.1.1
- Криптография 2.1.4
Теперь я обновил свои зависимости до
- Python 3.5.2
- Витая 17,9,0
- Lxml 4.2.1
- Криптография 2.2.2
После обновления моих зависимостей мои пауки застряли.
Он застревает после выдачи запросов, также не вызывается функция обратного вызова, и паук переходит в бесконечное состояние ожидания.
ScrapperRequestCode :
def start_requests(self):
driver = webdriver.Chrome()
driver.get(**)
urls = driver.find_elements_by_xpath("//div[contains(@class, 'media__item')]//a")
time_list = driver.find_elements_by_xpath("//span[contains(@class, 'timestamp--time')]")
index = 0
for url in urls:
url_href = str(url.get_attribute('href')).replace('http:', 'https:')
media_url = url.find_element_by_xpath("./*").get_attribute('src')
text = url.find_element_by_xpath("./*").get_attribute('alt')
try:
time = time_list[index].get_attribute('title')
time = str(datetime.datetime.strptime(str(time).lstrip(), '%b %d, %Y %I:%M%p'))
index = index + 1
except IndexError:
time = ''
pass
if url_href != "None":
count = News.objects.filter(url__icontains=url_href).count()
if count == 0:
headers = {'User-Agent': 'Mozilla/5.0 (X11; Ubuntu; Linux x86_64) '
'AppleWebKit/537.36 (KHTML, like Gecko)'
' Chrome/60.0.3112.101 Safari/537.36'}
request = Request(url_href, callback=self.parse, headers=headers, dont_filter=True)
request.meta['url'] = url_href
request.meta['text'] = text
request.meta['media_url'] = media_url
request.meta['time'] = time
yield request
sleep(5)
driver.close()
Код функции разбора:
def parse(self, response):
print(response, "RESPONSE===========================")
summary_list = []
story_url = response.meta['url']
story_title = response.meta['text']
media_url = response.meta['media_url']
time = response.meta['time']
try:
dummay_news = News.objects.get(url=story_url)
return
except News.DoesNotExist:
dummay_news = News()
story_p_tags = response.xpath("//div[contains(@class,'story__content')]/p/text()")
for p in story_p_tags:
summary_list.append(p.extract())
dummay_news.source = 'xyz'
dummay_news.time = time
dummay_news.title = story_title
dummay_news.url = story_url
dummay_news.set_summary(summary_list)
if media_url:
dummay_news.media_url = media_url
dummay_news.save()
yield dummay_news
Скрепер застревает после этого запроса :
2018-05-02 13:47:18 [selenium.webdriver.remote.remote_connection] DEBUG: Finished Request
2018-05-02 13:47:18 [selenium.webdriver.remote.remote_connection] DEBUG: GET http://127.0.0.1:35091/session/657a553b268a671e8117dba401ceeee8/element/0.8764352324704219-426/attribute/alt {"id": "0.8764352324704219-426", "name": "alt", "sessionId": "657a553b268a671e8117dba401ceeee8"}
2018-05-02 13:47:18 [selenium.webdriver.remote.remote_connection] DEBUG: Finished Request
2018-05-02 13:47:18 [selenium.webdriver.remote.remote_connection] DEBUG: GET http://127.0.0.1:35091/session/657a553b268a671e8117dba401ceeee8/element/0.8764352324704219-226/attribute/title {"id": "0.8764352324704219-226", "name": "title", "sessionId": "657a553b268a671e8117dba401ceeee8"}
2018-05-02 13:47:18 [selenium.webdriver.remote.remote_connection] DEBUG: Finished Request
Кроме того, после этой ошибки функция обратного вызова не запускается и застревает навсегда.
Любая помощь высоко ценится, заранее спасибо.