मुझे स्क्रैपी के बारे में सीमित ज्ञान है। इस कोड के साथ मैं एक विशिष्ट फोरम में लॉगिन कर सकता हूं। अब मुझे लॉगिन के बाद एक और यूआरएल सेट करने की जरूरत है:

https://forum.xxx.com/threads/topic-name/page-300

मैं 300-360 के बीच पृष्ठों की श्रेणी के साथ क्रॉल को स्वचालित करना चाहता हूं। विशेष रूप से इस वर्ग के सभी तत्व messageText

मैं वह कैसे कर सकता हूं?

import scrapy

class LoginSpider(scrapy.Spider):
    name = 'xxx.com'
    start_urls = ['https://forum.xxx.com/login/login']

    def parse(self, response):
        return scrapy.FormRequest.from_response(
            response,
            formdata={'login': 'xxx', 'register': '0', 'password': 'xxxxx', 'cookie_check': '0'},
            callback=self.after_login
        )

    def after_login(self, response):
        # check login succeed before going on
        if "authentication failed" in response.body:
            self.logger.error("Login failed")
            return

        # continue scraping with authenticated session...
1
anvd 12 अप्रैल 2017, 16:40

1 उत्तर

सबसे बढ़िया उत्तर

एक बार लॉग इन करने के बाद आपको जितनी आवश्यकता हो उतने अनुरोध प्राप्त करें:

from scrapy import Request
def after_login(self, response):
    # check login succeed before going on
    if "authentication failed" in response.body:
        self.logger.error("Login failed")
        return
    for i in range(300, 360):
        url = 'https://forum.xxx.com/threads/topic-name/page-{}'.format(i)
        yield Request(url, self.parse_page)


def parse_page(self, response):
    # parse page here
2
Granitosaurus 12 अप्रैल 2017, 16:59
1
हाँ, अनुरोध स्क्रैपी का एक वर्ग है। सही आयात के लिए मेरा संपादन देखें।
 – 
Granitosaurus
12 अप्रैल 2017, 17:00
ठीक है, अब यह सही ढंग से काम करता है लेकिन DEBUG के साथ: क्रॉल (403) त्रुटि, उपयोगकर्ता एजेंट सेट करने के बाद भी। headers = {'User-Agent': 'Mozilla/5.0 (X11; Linux x86_64; rv:48.0) Gecko/20100101 Firefox/48.0'} yield Request(url=url, callback=self.parse_page, headers=headers)
 – 
anvd
12 अप्रैल 2017, 17:16
कई चीजें हो सकती हैं जो 403 प्रतिक्रिया का कारण बनती हैं - इसका मतलब है कि आपको साइट द्वारा खारिज कर दिया गया है। यह हो सकता है कि जिस url को आप क्रॉल करने का प्रयास कर रहे थे, वह खराब रूप से स्वरूपित हो या आपके अनुरोध में कुछ गड़बड़ हो; क्या आपने इसे ब्राउज़र में खोलने का प्रयास किया है? यह एक बिल्कुल नया प्रश्न है और इसके लिए काफी डिबगिंग की आवश्यकता होती है, आपको एक नया प्रश्न खोलना चाहिए और ध्यान देना चाहिए कि आप कौन सी वेबसाइट क्रॉल कर रहे हैं क्योंकि प्रत्येक वेबसाइट इसे अलग तरीके से संभालती है।
 – 
Granitosaurus
12 अप्रैल 2017, 17:21