Scrapy 框架 手动发送请求 POST 请求的发送
手动发送请求
import scrapy
from choutiSpider.items import ChoutispiderItem
class ChoutiSpider(scrapy.Spider):
name = 'chouti'
# allowed_domains = ['www.xxx.com']
start_urls = ['https://dig.****.com/r/scoff/hot/1']
# 通用模板 url
url = 'https://dig.****.com/r/scoff/hot/%s'
page_num = 1
def parse(self, response):
div_list = response.xpath('//div[@id="content-list"]/div')
# print(div_list)
print(self.page_num)
for div in div_list:
content = div.xpath('./div[@class="news-content"]/div[1]/a/text()').extract_first().strip()
author = div.xpath('./div[@class="news-content"]/div[2]/a[4]/b/text()').extract_first()
# print(content, author)
item = ChoutispiderItem()
item['author'] = author
item['content'] = content
# 提交数据 到管道中
yield item
# 手动发送请求 分页爬取
if self.page_num < 120:
self.page_num += 1
new_url = self.url % self.page_num
# 发送请求 提交
yield scrapy.Request(url=new_url, callback=self.parse)
post 请求发送
# 在scrapy框架中默认情况下cookie会被自动处理,无需手动!
class PostdemoSpider(scrapy.Spider):
name = 'postdemo'
allowed_domains = ['www.xxx.com']
start_urls = ['https://fanyi.****.com/sug']
# 调用父类的 发送请求的 方法
def start_requests(self):
for url in self.start_urls:
data = {
'kw': 'cat'
}
yield scrapy.FormRequest(url=url, formdata=data, callback=self.parse)
def parse(self, response):
print(response.text)
在scrapy框架中默认情况下cookie会被自动处理,无需手动!
settings 配置:
# Disable cookies (enabled by default)
# COOKIES_ENABLED = False
请求传参:
- 二级详情页面 的 item 传递
import scrapy
from boosPro.items import BoosproItem
class BoosSpider(scrapy.Spider):
name = 'boos'
# allowed_domains = ['www.xxx.com']
start_urls = ['https://www.****.com/c101010100/?query=python%E7%88%AC%E8%99%AB&page=1']
url = 'https://www.****.com/c101010100/?query=python%E7%88%AC%E8%99%AB&page=%s'
page_num = 1
def parse(self, response):
li_list = response.xpath('//div[@class="job-list"]/ul/li')
for li in li_list:
item = BoosproItem()
title = li.xpath('.//div[@class="job-title"]/text()').extract_first()
# 薪资 salary
salary = li.xpath('.//div[@class="info-primary"]/h3/a/span/text()').extract_first()
# 公司 company
company = li.xpath('.//div[@class="company-text"]/h3/a/text()').extract_first()
detail_url = 'https://www.zhipin.com' + li.xpath('.//div[@class="info-primary"]/h3/a/@href').extract_first()
item['title'] = title
item['salary'] = salary
item['company'] = company
# 对详情页的url进行手动请求的发送
yield scrapy.Request(url=detail_url, callback=self.parsrDetail, meta={'item': item})
if self.page_num <= 3:
self.page_num += 1
newUrl = self.url % self.page_num
yield scrapy.Request(url=newUrl, callback=self.parse)
# 用来解析详情页的相关的数据
def parsrDetail(self, response):
# 接收meta
item = response.meta['item']
job_desc = response.xpath('//*[@id="main"]/div[3]/div/div[2]/div[2]/div[1]/div//text()').extract()
company_content = response.xpath('//*[@id="main"]/div[3]/div/div[2]/div[2]/div[2]/div/text()').extract_first()
job_desc = ' '.join(job_desc)
item['job_desc'] = job_desc
item['company_content'] = company_content
# print(job_desc, 1111111)
yield item
Scrapy 框架 手动发送请求 POST 请求的发送的更多相关文章
- scrapy框架的日志等级和请求传参, 优化效率
目录 scrapy框架的日志等级和请求传参, 优化效率 Scrapy的日志等级 请求传参 如何提高scripy的爬取效率 scrapy框架的日志等级和请求传参, 优化效率 Scrapy的日志等级 在使 ...
- scrapy框架之日志等级和请求传参-cookie-代理
一.Scrapy的日志等级 - 在使用scrapy crawl spiderFileName运行程序时,在终端里打印输出的就是scrapy的日志信息. - 日志信息的种类: ERROR : 一般错误 ...
- Scrapy框架之日志等级和请求传参
一.Scrapy的日志等级 在使用scrapy crawl spiderFileName运行程序时,在终端里打印输出的就是scrapy的日志信息. 1.日志等级(信息种类) ERROR:错误 WARN ...
- 13.scrapy框架的日志等级和请求传参
今日概要 日志等级 请求传参 如何提高scrapy的爬取效率 今日详情 一.Scrapy的日志等级 - 在使用scrapy crawl spiderFileName运行程序时,在终端里打印输出的就是s ...
- scrapy框架的日志等级和请求传参
日志等级 请求传参 如何提高scrapy的爬取效率 一.Scrapy的日志等级 - 在使用scrapy crawl spiderFileName运行程序时,在终端里打印输出的就是scrapy的日志信息 ...
- scrapy框架的日志等级和请求参数
一 . Scrapy的日志等级 - 在使用 scrapy crawl xxx 允许程序时,在终端里打印输出的就是scrapy的日志信息 - 日志信息的种类 : ERROR : 错误信息 WARNING ...
- 爬虫开发10.scrapy框架之日志等级和请求传参
今日概要 日志等级 请求传参 今日详情 一.Scrapy的日志等级 - 在使用scrapy crawl spiderFileName运行程序时,在终端里打印输出的就是scrapy的日志信息. - 日志 ...
- 13,scrapy框架的日志等级和请求传参
今日概要 日志等级 请求传参 如何提高scrapy的爬取效率 一.Scrapy的日志等级 - 在使用scrapy crawl spiderFileName运行程序时,在终端里打印输出的就是scrapy ...
- 12 Scrapy框架的日志等级和请求传参
一.Scrapy的日志等级 - 在使用scrapy crawl spiderFileName运行程序时,在终端里打印输出的就是scrapy的日志信息. - 日志信息的种类: ERROR : 一般错误 ...
随机推荐
- [android] android下junit测试框架配置
我们的业务代码一般是放在一个新的包下面,这个业务类不能够通过右键run as java application,因为android项目只能运行在手机上的dalvak虚拟机里面 新建一个包,里面写测试类 ...
- JavaSE-基础语法(四)-javaSE进阶
javaSE进阶 三.异常 四.多线程 五.Lambda表达式 六.IO流 七.网络编程 八.新特性 13.异常体系14.异常分类15.声明抛出捕获异常16.自定义异常17.线程概念18.线程同步19 ...
- Integer Game(UVA11489)3的倍数
K - Integer Game Time Limit:1000MS Memory Limit:0KB 64bit IO Format:%lld & %llu Submit Status Pr ...
- No.3 数组中重复的数字 (P39)
题目1:找出数组中重复的数字 [题目描述] 在一个长度为n的数组里的所有数字都在0到n-1的范围内. 数组中某些数字是重复的,但不知道有几个数字是重复的.也不知道每个数字重复几次.请找出数组中任意一个 ...
- cf934C. A Twisty Movement(思维题)
题意 题目链接 Sol 这题最直接的维护区间以0/1结尾的LIS的方法就不说了. 其实我们可以直接考虑翻转以某个位置为中点的区间的最大值 不难发现前缀和后缀产生的贡献都是独立的,可以直接算.维护一下前 ...
- Salesforce 自定义标签在代码中的应用
自定义标签简介 Salesforce 中自定义标签(Custom Label)的作用是存储一般性的文本,可以用于 Apex.Visualforce 页面.Lightning 组件等地方,用于显示提示信 ...
- spring Boot 出现:org.springframework.context.ApplicationContextException: Unable to start ServletWebServerApplicationContext due to missing ServletWebServerFactory bean.
org.springframework.context.ApplicationContextException: Unable to start ServletWebServerApplication ...
- git 入门教程之紧急修复
和往常一样,每个人团队开发者都在自己的本地分支上进行日常工作,相互独立又相互联系,一直以来相安无事,可是某天下午,上级领导突然急冲冲的打电话告诉你线上出bug了,需要你紧急修复,下班之前必须解决! 我 ...
- 使用VSTS的Git进行版本控制(二)——提交保存工作
使用VSTS的Git进行版本控制(二)--提交保存工作 当对文件进行更改时,Git将在本地仓库中记录更改.可以通过选择变更来提交的对应更改.提交总是针对本地的Git仓库,因此不必担心提交是完美的,或者 ...
- ${pageContext.request.contextPath}相关问题总结
(1)采用绝对路径,但为了解决不同部署方式的差别,在所有非struts标签的路径前加${pageContext.request.contextPath},如原路径为:”/images/title.gi ...