Python scrapy reddit 确认按钮中断抓取

标签 python web-scraping scrapy

我正在尝试抓取网站数据,当我访问 18 岁以上的页面时,我收到一个警告页面。我的爬虫在大多数 reddit 页面上正常工作,我可以成功获取数据。我尝试使用 selenium 移动到下一页,当它打开浏览器时成功,但爬虫没有跟随到该页面。下面是我的代码..

class DarknetmarketsSpider(scrapy.Spider):
    name = "darknetmarkets"
    allowed_domains = ["https://www.reddit.com"]
    start_urls = (
        'http://www.reddit.com/r/darknetmarkets',
    )
    rules = (Rule(LinkExtractor(allow=()), callback='parse_obj', follow=False),)
    def __init__(self):
        self.driver = webdriver.Firefox()

    def parse(self, response):
        self.driver.get('http://www.reddit.com/r/darknetmarkets')
        #self.driver.get('https://www.reddit.com/over18?dest=https%3A%2F%2Fwww.reddit.com%2Fr%2Fdarknetmarketsnoobs')

        while True:
            try:
                YES_BUTTON = '//button[@value="yes"]'
                next = self.driver.find_element_by_xpath(YES_BUTTON).click()


                url = 'http://www.reddit.com/r/darknetmarkets'

                next.click()
            except:
                break

        self.driver.close()


        item = darknetItem()
        item['url'] = []
        for link in LinkExtractor(allow=(), deny=self.allowed_domains).extract_links(response):
            item['url'].append(link.url)
            print link

按钮的CSS..

<button class="c-btn c-btn-primary" type="submit" name="over18" value="yes">continue</button>

最佳答案

我看到您正试图绕过该 subreddit 中的年龄限制屏幕。单击“继续”按钮后,该选择将保存为 cookie,因此您必须返回到 scrapy。

在你用Selenium点击它之后保存cookies并将它们发送到scrapy

代码由 scrapy authentication login with cookies 提供

class MySpider(scrapy.Spider):
name = 'MySpider'
start_urls = ['http://reddit.com/']

def get_cookies(self):
    self.driver = webdriver.Firefox()
    base_url = "http://www.reddit.com/r/darknetmarkets/"
    self.driver.get(base_url)
    self.driver.find_element_by_xpath("//button[@value='yes']").click()
    cookies = self.driver.get_cookies()
    self.driver.close()
    return cookies

def parse(self, response):
    yield scrapy.Request("http://www.reddit.com/r/darknetmarkets/",
        cookies=self.get_cookies(),
        callback=self.darkNetPage)

关于Python scrapy reddit 确认按钮中断抓取,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36994417/

相关文章:

python - 尝试从 pyevolve 导入时出现 "AttributeError: fileno"

python - 在多索引数据框中创建不存在的列

node.js - Web Scrape Meteor 页面

python - 使用 scrapy 下载 url 列表,到文件名列表,具有速率限制

python - getallAttributes() 的正确方法是什么

python - 使用 PythonService.exe 在使用 virtualenv 时托管 python 服务

python - 需要帮助将 Flask-SQLAlchemy 连接到 MS SQL Server 2008R2

r - 使用 "download.file"函数下载多个文件

javascript - 使用 javascript (phantomjs) 导航/抓取 hashbang 链接

Python:如何将字符串附加到 scrapy 列表项?