小编典典

Scrapy-抓取时发现抓取链接

scrapy

我只能假定这是Scrapy中要做的最基本的事情之一,但我只是无法弄清楚该怎么做。基本上,我会抓取一个页面以获得包含本周更新的网址列表。然后,我需要一个个地进入这些网址,并从中获取信息。我目前已经设置了两个抓取,它们可以手动完美地工作。所以我首先从第一个scraper中抓取url,然后将它们硬编码为第二个scraper上的start_urls[]。。

最好的方法是什么?是否像在抓取文件中调用另一个获取网址列表并在其中进行抓取的函数那样简单?

这是获取网址列表的抓取工具:

class MySpider(scrapy.Spider):
    name = "myspider"

    start_urls = [ .....
    ]


    def parse(self, response):
        rows = response.css('table.apas_tbl tr').extract()
        urls = []
        for row in rows[1:]:
            soup = BeautifulSoup(row, 'lxml')
            dates = soup.find_all('input')
        urls.append("http://myurl{}.com/{}".format(dates[0]['value'], dates[1]['value']))

这是刮板,然后逐个浏览网址:

class Planning(scrapy.Spider):
    name = "planning"

    start_urls = [
       ...
    ]


    def parse(self, response):
        rows = response.xpath('//div[@id="apas_form"]').extract_first()
        soup = BeautifulSoup(rows, 'lxml')
        pages = soup.find(id='apas_form_text')
        for link in pages.find_all('a'):
            url = 'myurl.com/{}'.format(link['href'])

        resultTable = soup.find("table", { "class" : "apas_tbl" })

然后,我将resultTable保存到文件中。此刻,我获取url列表的输出并将其复制到其他刮板中。


阅读 343

收藏
2020-04-09

共1个答案

小编典典

对于通过解析找到的每个链接,你都可以请求它,并使用其他函数来解析内容:

class MySpider(scrapy.Spider):
    name = "myspider"

    start_urls = [ .....
    ]

    def parse(self, response):
        rows = response.css('table.apas_tbl tr').extract()
        urls = []
        for row in rows[1:]:
            soup = BeautifulSoup(row, 'lxml')
            dates = soup.find_all('input')
            url = "http://myurl{}.com/{}".format(dates[0]['value'], dates[1]['value'])
            urls.append(url)
            yield scrapy.Request(url, callback=self.parse_page_contents)

    def parse_page_contents(self, response):
        rows = response.xpath('//div[@id="apas_form"]').extract_first()
        soup = BeautifulSoup(rows, 'lxml')
        pages = soup.find(id='apas_form_text')
        for link in pages.find_all('a'):
            url = 'myurl.com/{}'.format(link['href'])

        resultTable = soup.find("table", { "class" : "apas_tbl" })
2020-04-09