scrapy多个page爬取, post请求, 通过爬到的URL继续发请求爬页面
scrapy多个page的爬取
import scrapy from bossPro.items import BossproItem class BossSpider(scrapy.Spider): name = 'boss' # allowed_domains = ['www.xxx.com'] start_urls = [ 'https://www.zhipin.com/job_detail/?query=python%E7%88%AC%E8%99%AB&scity=101010100&industry=&position='] url = 'https://www.zhipin.com/c101010100/?query=python爬虫&page=%d&ka=page-2' page = 1 # 解析+管道持久化存储 def parse(self, response): li_list = response.xpath('//div[@class="job-list"]/ul/li') for li in li_list: job_name = li.xpath('.//div[@class="info-primary"]/h3/a/div/text()').extract_first() salary = li.xpath('.//div[@class="info-primary"]/h3/a/span/text()').extract_first() company = li.xpath('.//div[@class="company-text"]/h3/a/text()').extract_first() # 实例化一个item对象 item = BossproItem() # 将解析到的数据全部封装到item对象中 item['job_name'] = job_name item['salary'] = salary item['company'] = company # 将item提交给管道 yield item if self.page <= 3: print('if 执行!!!') self.page += 1 new_url = format(self.url % self.page) print(new_url) # 手动请求发送 yield scrapy.Request(url=new_url, callback=self.parse)
scrapy post请求
import scrapy from scrapy1.items import Scrapy1Item class MyspiderSpider(scrapy.Spider): name = 'qiubai' # allowed_domains = ['www.baidu.com'] start_urls = ['https://fanyi.baidu.com/sug'] data = {'kw': 'cat'} def start_requests(self): for url in self.start_urls: yield scrapy.FormRequest(url=url, formdata=self.data, callback=self.parse) def parse(self, response): item = Scrapy1Item() item['title'] = 'cat' item['content'] = response.text yield item
scrapy通过爬到的URL继续发请求爬页面
import scrapy from scrapy1.items import Scrapy1Item class MyspiderSpider(scrapy.Spider): name = 'qiubai' # allowed_domains = ['www.baidu.com'] start_urls = ['https://www.4567tv.tv/frim/index1.html'] def get_detail(self, response): item = response.meta['item'] detail = response.xpath('/html/body/div[1]/div/div/div/div[2]/p[5]/span[2]/text()').extract_first() item['content'] = detail yield item def parse(self, response): div_list = response.xpath('//li[@class="col-md-6 col-sm-4 col-xs-3"]') # print(div_list) for li in div_list: item = Scrapy1Item() name = li.xpath('./div/a/@title').extract_first() href = 'https://www.4567tv.tv' + li.xpath('./div/a/@href').extract_first() item['title'] = name yield scrapy.Request(url=href, callback=self.get_detail, meta={'item':item})