我正在尝试抓取下面粘贴的网站并遍历每个页面,以检索职位名称和每个作业的发布日期。我似乎只刮了第一页。该站点是ASPX,因此需要将回发发送到服务器以检索信息。我曾尝试使用scrapy来模拟它们,但没有成功。我了解您可以使用一些工具(例如Selenium)来完成此任务,但我希望可以找到一种使用scrapy进行此操作的方法。此资源提供了一些帮助:https://blog.scrapinghub.com/2016/04/20/scrapy-tips-from-the-pros-april-2016-edition 但是他们的问题与我的问题也略有不同,我对将头撞到墙上感到厌倦。
因此,到目前为止,我已经完成了关于我希望刮板如何工作的一般想法:
我最大的问题是,我对ASP页不是很熟悉,但是我确实知道浏览器必须对每个页面进行回发,但是我似乎无法以正确的方式提交信息以使其遍历页面的每个页面。信息。
这是我当前的代码(已更改了无数次)。我认识到这将无法正常工作(解析的第二部分显然考虑得不好)。我只是希望这可以成为其他人查看它的好起点,并帮助我获得答案。
import scrapy, re
from ..items import UnionItems
class Union(scrapy.Spider):
name = "union"
custom_settings = {
'ITEM_PIPELINES': {
'tutorial.pipelines.UnionHospital': 300,
'tutorial.pipelines.MongoDBPipeline': 300,
}
# 'DEFAULT_REQUEST_HEADERS': {
# 'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
# 'Accept-Language': 'en',
# 'Referer': 'https://re21.ultipro.com/UNI1029/JobBoard/ListJobs.aspx?__SVRTRID=05EB3802-DC15-42A8-9843-188F8787D187'
# }
}
start_urls = [
'https://re21.ultipro.com/UNI1029/JobBoard/ListJobs.aspx?__SVRTRID=FFDDC66F-AA37-4484-A868-96DF06DA013C',
]
def parse(self,response):
items = UnionItems()
job_title = response.css('.highlightRow:nth-child(3) .LinkSmall , .Cell:nth-child(3) .LinkSmall').css('::text').extract()
dates_posted = response.css('.highlightRow:nth-child(1) .LinkSmall , .Cell:nth-child(1) .LinkSmall').css('::text').extract()
items['job_title'] = job_title
items['date_posted'] = dates_posted
yield items
i = 2
for arrow in response.css('input#__Next::attr(value)').extract_first():
yield scrapy.FormRequest.from_response(
response,
method="POST",
formdata={
'__Next': response.css('input#__Next::attr(value)').extract_first(),
'__PageNumber':i,
'__VIEWSTATE': response.css('input#__VIEWSTATE::attr(value)').extract_first(),
}
)
i = i+1
此代码可以成功地抓取作业的第一页和发布的日期,但是之后,我不知道如何检索接下来的几页。