我有这个网页(https://academic.oup.com/plphys/search-results?q=photosynthesis&allJournals=1&fl_SiteID=6323&page=1),我想从中提取信息,例如,标题,名称,doi等。对于第一页,我可以很容易地做,但由于有更多的网页,我不能爬过。我的代码是:
import scrapy
class PhotosynSpiderSpider(scrapy.Spider):
name = 'photosyn_spider'
allowed_domains = ['https://academic.oup.com/plphys']
start_urls = ['https://academic.oup.com/plphys/search-results?q=photosynthesis&allJournals=1&fl_SiteID=6323']
def parse(self, response):
# Step 1: Locate the first page in div class 'pageNumbers al-pageNumbers'
page_numbers = response.css('div.pageNumbers.al-pageNumbers')
current_page = page_numbers.css('span.current-page::text').get()
total_pages = page_numbers.css('span.total-pages::text').get()
# Step 2: Locate link in a class 'al-citation-list', and extract all the href for doi in the element 'a'
citation_list = response.css('a.al-citation-list')
dois = citation_list.css('a::attr(href)').getall()
for doi in dois:
yield {'doi': doi}
# Step 3: Open url for the next page in the element 'a' and class 'sr-nav-next al-nav-next' and repeat step 2
if current_page != total_pages:
next_page_url = response.css('a.sr-nav-next.al-nav-next::attr(href)').get()
yield scrapy.Request(next_page_url, callback=self.parse)
我正在尝试将结果转储到JSON文件中。但是,结果为空。有人能帮我吗?谢谢
页面截图:
1条答案
按热度按时间ddrv8njm1#
如果你看下一个页面元素,你会发现
href
属性不是一个实际的url:这是因为点击下一步按钮并不会把你带到一个新的页面,相反,它使用javascript通过 AJAX 调用来交换文章部分的内容。
使用 AJAX 调用中使用的url,我们可以通过匹配它的模式从后续页面中获得所有结果。
例如:
第1-2页的输出:
注:在写这个答案的时候,网站上放了一个验证码。如果您试图在验证码处于活动状态时抓取网站,您需要做的就是从浏览器中复制cookie并将其插入start_requests方法中的每个请求中。