我只能假设这是 Scrapy 中最基本的事情之一,但我就是不知道如何去做。基本上,我会抓取一页来获取包含本周更新的网址列表。然后我需要一一进入这些网址并从中获取信息。我目前已经设置了两个刮刀,并且它们可以完美地手动工作。因此,我首先从第一个抓取器中抓取 url,然后将它们硬编码为第二个抓取器上的 start_urls[]。
最好的方法是什么?是否像调用 scraper 文件中的另一个函数一样简单,该函数获取 url 列表并在那里进行抓取?
这是获取 url 列表的抓取工具:
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']))
这是一个会一一浏览 url 的抓取工具:
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 列表的输出并将其复制到另一个抓取工具中。
对于使用 parse 找到的每个链接,您可以请求它并使用其他函数解析内容:
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" })
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)