Scrapy爬虫框架的主要组件?,Scrapy爬虫框架,入门案例(非常详细)
Yyds干货库存
Scrapyscrapy爬虫框架的爬行过程
scrapy框架各个组件的介绍对于以上四个步骤,也就是各个组件,它们之间没有直接的联系,都是通过scrapy引擎连接起来传递数据。引擎已经用scrapy框架实现了,但是手工实现通常是蜘蛛爬虫和管道流水线。对于复杂的爬虫项目,下载器和蜘蛛的中间件可以手工编写,以满足更复杂的业务需求。
scrapy框架的简单使用安装了scrapy的第三方库后,可以通过终端控制台直接输入命令。
创建一个杂乱的项目杂乱的开始项目myspider
生成一只爬虫刺青蜘蛛itcast.cn。
提取数据改进spider,使用xpath等。
为管道中的操作保存数据
启动爬虫scrapy crawl itcast。
scrapy框架使用一个简单的过程来创建scrapy项目,它将自动生成一系列py文件和配置文件。
创建自定义名称并标识搜索域名的爬网程序(可选)。
编写代码完善自定义爬虫,达到想要的效果。
使用yield将解析的数据传输到管道。
使用pipeline存储数据(要在pipeline中操作数据,需要在settings.py中打开配置,默认是关闭的)。
使用管道应注意的几个问题
在scrapy中使用日志模块
在设置中设置LOG_LEVEL=WARNING。
设置LOG_FILE=。/a.log #在设置中设置日志文件的位置和文件名,日志内容不会显示在终端中。
导入日志记录,实例化记录器的方式使用任何文件中的记录器输出内容。
在普通项目中
导入日志记录
Logging.basicConfig(.)#设置日志输出的样式和格式
实例化一个“logger=logging.getLogger(name)”
在任何py文件中调用记录器。
scrapy中的翻页请求案例爬上腾讯招聘。因为网站的主流趋势是前后分离,直接去get网站只能得到一堆没有数据的html标签,而网页上显示的数据都是js请求后端接口然后拼接html中的数据得到的,所以不能直接访问网址,但是可以通过chrome开发者工具得到网站请求的后端接口地址然后请求地址。
通过比较网站请求后端接口的querystring来确定要请求的url。
在腾讯招聘网,翻页查看招聘信息也是通过请求后端接口实现的,所以翻页和抓取其实也是对后端接口的请求,只是需要传递不同的querystring。
蜘蛛代码
导入scrapyimport随机导入JSON类腾讯rspider(scrapy .蜘蛛):name=腾讯HR allowed _ domains=[腾讯。com ]start _ URLs=[ https://careers。腾讯。com/腾讯职业/API/post/查询?timestamp=1614839354704 parentCategoryId=40001 pageIndex=1 pageSize=10 language=zh-cn area=cn ]# start _ URLs=https://careers.tencent.com/tencentcareer/api/post/Query?timestamp=1614839354704 parentCategoryId=40001 pageIndex=1 pageSize=10 language=zh-cn area=cn def parse(self,response): #由于是请求后端接口,所以返回的是数据数据,因此获取反应对象的文本内容, # 然后转换成词典数据类型便于操作gr _ list=响应。text gr _ dict=JSON。loads(gr _ list)#因为实现翻页功能就是参数中的页面索引的变化,所以获取每次的索引,然后下一次的指数加一即可start _ URL=str(响应。请求。URL)start _ Index=int(start _ URL。find( Index )6)mid _ Index=int(start _ URL。find(,start _ Index))num _=start _ URL[start _ Index:mid _ Index]#一般返回的数据数据会有共有多少条数据,这里取出temp=gr_dict[Data][Count] #定义一个字典item={} for i in range(10): #填充所需数据,通过访问词典的方式取出数据item[ Id ]=gr _ dict[ Data ][ Posts ][I][ PostId ]item[ Name ]=gr _ dict[ Data ][ Posts ][I][ recruit postname ]item[ Content ]=gr _ dict[ Data ][ Posts ][I][ respons ]item[ Url ]=https://careers.tencent.com/jobdesc.html?PostId= gr _ dict[ Data ][ Posts ][I][ PostId ]#将项目数据交给引擎产出项目#下一个url #这里确定下一次请求的url,同时全球资源定位器(统一资源定位器)中的时间戳就是一个13位的随机数字rand _ num 1=随机。randint(100000,999999)rand _ num 2=random。rand int(1000000,9999999)rand _ num=str(rand _ num 1)str(rand _ num 2)#这里确定页面索引的数值nums=int(start _ URL[start _ index:mid _ index])1 if nums int(temp)/10:pass else:nums=str(nums)next _ URL=https://careers.tencent.com/tencentcareer/api/post/Query?timestamp= rand _ num parentCategoryId=40001页面索引= nums pageSize=10 language=zh-cn area=cn #将下一次请求的全球资源定位器(统一资源定位器)封装成请求对象传递给引擎产生刺痒感。请求(next_url,callback=self.parse)管道代码
导入CSV类腾讯管道:def process _ item(self,item,spider): #将获取到的各个数据保存到战斗支援车文件带开(。/tencent_hr.csv , a ,编码=utf-8 )作为文件:fieldnames=[Id , Name , Content , Url] writer=csv .DictWriter(文件,字段名=字段名)Writer。write header()print(item)writer。writerow(item)返回项目补充好斗的.请求
scrapy的项目使用
案例爬取阳光网的问政信息爬取阳光政务网的信息,通过铬开发者工具知道网页的数据都是正常填充在超文本标记语言中,所以爬取阳关网就只是正常的解析超文本标记语言标签数据。
但注意的是,因为还需要爬取问政信息详情页的图片等信息,因此在书写蜘蛛;状似蜘蛛的物体;星形轮;十字叉;连接柄;十字头代码时需要注意从语法上分析方法的书写
蜘蛛;状似蜘蛛的物体;星形轮;十字叉;连接柄;十字头代码
从阳光导入废料。项目导入阳光项目类阳光govSpider(废料蜘蛛):name= yangguanggov allowed _ domains=[ sun 0769。com ]start _ URLs=[ http://wz。孙0769。com/political/index/politics west?page=1] def parse(self,response):start _ URL=response。URL #按页分组进行爬取并解析数据Li _ list=响应。Li _ list的XPath(/html/body/div[2]/div[3]/ul[2]):#在项目中定义的工具类。来承载所需的数据item=YangguangItem()item[ Id ]=str(Li。XPath(./li/span[1]/text())。extract _ first())item[ State ]=str(Li。XPath(./Li/span[2][text()).extract_first()).替换( , )。replace(\n , )item[Content]=str(li.xpath( ./li/span[3]/a/text()).extract _ first())item[ Time ]=Li。XPath(./Li/span/text()).extract _ first()item[ Link ]= http://wz。孙0769。com str(李。XPath(./li/span[3]/a[1]/@href ).extract_first()) #访问每一条问政信息的详情页,并使用解析详细信息方法进行处理# 借助scrapy的自指的参数将项目传递到解析详细信息方法中产生刺痒感Request( item[Link],callback=self.parse_detail,meta={item: item} ) #请求下一页start _ URL _ page=int(str(start _ URL)[str(start _ URL)].find(=)1:])1 next _ URL=http://wz.sun0769.com/political/index/politicsNewest?page= str(start_url_page)产生垃圾Request( next_url,callback=self.parse ) #解析详情页的数据def parse_detail(self,response):item=response。meta[ item ]item[ Content _ img ]=响应。XPath(/html/body/div[3]/div[2]/div[2]/img/@ src )生成项目项目代码
进口废料#在项目类中定义所需的字段类阳光项目(刺儿头. Item): #在这里为您的项目定义字段,如:# name=scrapy .Field() Id=scrapy .Field() Link=scrapy .Field() State=scrapy .Field() Content=scrapy .Field() Time=scrapy .Field() Content_img=scrapy .字段()管道代码
阳光管道等级:#简单的打印出所需数据def process_item(self,item,spider):print(item)return items crapy的调试信息认识
通过查看scrapy框架打印的调试信息,可以查看scrapy启动顺序,在出现错误时,可以辅助解决成为。
scrapy深入之粗糙的外壳
通过粗糙的外壳可以在未启动蜘蛛;状似蜘蛛的物体;星形轮;十字叉;连接柄;十字头的情况下尝试以及调试代码,在一些不能确定操作的情况下可以先通过壳来验证尝试。
scrapy深入之设置和管道设置
对scrapy项目的设置文件的介绍:
#杨光项目的零碎设置##为简单起见,该文件仅包含重要的或#常用的设置。你可以参考文档找到更多设置:# # https://docs.scrapy.org/en/latest/topics/settings.html# https://文件。scrapy。org/en/latest/topics/downloader-中间件。html # https://文档。scrapy。org/en/latest/topics/spider-中间件。html #项目名BOT_NAME=杨光 #爬虫模块所在位置蜘蛛模块=[杨光。蜘蛛]#新建爬虫所在位置杨光新闻。蜘蛛#输出日志等级LOG_LEVEL=警告 #设置每次发送请求时携带的头球的用户-银#通过在用户代理# USER _ AGENT= Mozilla/5.0(Windows NT 10.0;win 64x 64)apple WebKit/537.36(KHTML,像壁虎一样)Chrome/89。0 .4389 .72 Safari/537.36 Edg/89。0 .774 .45 #设置是否遵守机器人协议#服从机器人。txt规则机器人txt _ Obey=True #设置最大同时请求发出量#配置Scrapy执行的最大并发请求数(默认值:16)#并发请求数=32#为同一网站的请求配置延迟(默认值:0)#请参阅https://份文件。Scrapy。org/en/最新/主题/设置。html #下载-延迟#另请参阅自动节流设置和文档#设置每次请求间歇时间#下载延迟=3#一般用处较少#下载延迟设置将只接受以下之一:# CONCURRENT _ REQUESTS _ PER _ DOMAIN=16 # CONCURRENT _ REQUESTS _ PER _ IP=16 # cookie是否开启,默认可以开启#禁用cookie(默认启用)#COOKIES_ENABLED=False#控制台组件是否开启#禁用用于远程联接服务的标准协议或者实现此协议的软件(可为动词)控制台(默认启用)#TELNETCONSOLE_ENABLED=False#设置默认请求头,用户-银不能同时放置在此处#覆盖默认请求头:# DEFAULT _ REQUEST _ HEADERS={ # Accept : text/html,application/xhtml xml,application/XML;q=0.9,*/*;q=0.8 ,# 接受语言: en ,#}#设置爬虫中间件是否开启#启用或禁用蜘蛛中间件#见https://份文件。scrapy。org/en/latest/topics/SPIDER-中间件。html #蜘蛛_中间件={ # 杨光。中间件。“杨光蜘蛛中间件”:543,#}#设置下载中间件是否开启#启用或禁用下载器中间件#参见https://文档。scrapy。org/en/latest/topics/DOWNLOADER-中间件。html # DOWNLOADER _中间件={ # 杨光。中间件。“央广下载器中间件”:543,#}#启用或禁用扩展#参见https://文档。scrapy。org/en/latest/topics/EXTENSIONS。html # EXTENSIONS={ # scrapy。扩展。远程登录。 telnet控制台:无,#}#设置管道是否开启#配置项目管道#请参阅https://份文件。scrapy。org/en/latest/topics/item-pipeline。html项目管道={ 杨光。管道。“杨光管道”:300,}#自动限速相关设置#启用并配置自动油门扩展(默认情况下禁用)#参见https://份文件。scrapy。org/en/latest/topics/自动节流。html # auto throttle _ ENABLED=True #初始下载延迟#自动油门_启动_延迟=5#在高延迟情况下设置的最大下载延迟#自动油门_最大_延迟=60#废料应该并行发送到#每个远程服务器的平均请求数# auto throttle _ TARGET _ CONCURRENCY=1.0 #启用显示收到的每个响应的节流统计信息:#自动节流_调试=False# HTTP缓存相关设置#启用并配置超文本传送协议缓存(默认禁用)#见https://文档。scrapy。org/en/latest/topics/downloader-中间件。html # HTTP cache-middleware-settings # HTTP cache _ ENABLED=True # HTTP cache _ EXPIRATION _ SECS=0 # HTTP cache _ DIR= HTTP cache # HTTP cache _ IGNORE _ HTTP _ CODES=[]# HTTP cache _ STORAGE= scrapy。扩展。HTTPCACHE。文件系统缓存存储管道管道在管道中不仅只有项目创建时的流程_项目方法,管道中还有打开蜘蛛,关闭蜘蛛方法等,这两个方法就是分别在爬虫开启时和爬虫结束时执行一次。
举例代码:
类阳关管道:def process _ item (self,item,spider): print (item) #如果不返回,另一个权重更低的管道将不会得到item返回item def open _ spider (self,Spider): #这个在爬虫开启时执行一次。spider.test=hello #一个属性值添加到爬虫中,然后属性值defclose _ spider (self,spider)可以用在管道中的process_item或者spider中:#这个在爬虫关闭时执行一次。spider.test=mongodb的补充是在pymongo第三方包的帮助下操作的。
scrapy中的Crawlspider爬虫生成crawlspider命令:
Scrapy genspider -t爬行爬虫名称域名爬行。
使用crawlspider创建crawler scrapy gen spider-t crawler名称allow_domain
指定start_url,对应的响应会通过规则提取url地址。
完善规则,增加规则rule(链接提取器(allow=r /web/site 0/tab 5240/info \ d . htm ),回调= parse _ item ),
注意:url地址不完整,crawlspider会在请求完成后自动补充。
解析函数还不能定义,它有特殊的函数要实现。
回调:将连接提取器提取的url地址对应的响应交给他处理。
Follow:连接提取器提取的url地址对应的响应是否继续被规则过滤。
LinkExtractors Link Extractor:您可以使用Link Extractor提取所需的url,而无需程序员亲自操作,然后发送请求。这些工作都可以交给LinkExtractors,由LinkExtractors在所有抓取的页面中寻找符合规则的URL,实现自动抓取。简要介绍以下LinkExtractors类:
class scrapy . link extractor s . link extractor(allow=(),deny=(),allow_domains=(),deny_domains=(),deny_extensions=None,restrict _ XPath s=( a , area ),attrs=(href ),canonicalize=true,unique=true,process _ value=none)主要参数说明:
允许:允许的URL。将提取满足此正则表达式的所有URL。拒绝:禁止的url。不会提取所有满足此正则表达式的URL。Allow_domains:允许的域名。将只提取此中指定的域名的url。Deny_domains:禁止的域名。不会提取此中指定的所有域名的URL。Restrict_xpaths:严格xpath。并允许一起过滤链接。
规则类:定义爬虫的规则类。简单介绍一下这门课:
class scrapy . spiders . rule(link _ extractor,callback=none,CB _ kwargs=none,follow=none,process _ links=none,process _ request=none)主要参数说明:
Link_extractor:用于定义爬行规则的LinkExtractor对象。Callback:满足此规则的url,应该执行哪个回调函数。因为CrawlSpider使用parse作为回调函数,所以不要重写parse自己的回调函数作为回调函数。Follow:指定是否需要跟踪根据此规则从响应中提取的链接。Process_links:从link_extractor获取链接后,会传递给这个函数,过滤掉不需要抓取的链接。从xiaohua.zolcom.cn、web analytics可以得知,网页的数据直接嵌入html,请求网站域名,服务器直接返回的html标签包含了网页中可见的所有信息,所以直接解析服务器响应的HTML标签。
同时,当页面被翻到抓取数据时,也发现下一页的url已经嵌入html中,所以借助crawlspider提取下一页的url非常方便。
蜘蛛代码:
从scrapy.linkextractors导入链接提取器从scrapy .蜘蛛导入CrawlSpider,规则导入类xhzol spider(爬行蜘蛛):name= xh zol allowed _ domains=[ Xiaohua。佐尔。com。cn ]start _ URLs=[ http://小花。佐尔。com。cn/冷晓华/1。html ]规则=(#这里定义从相应中提取符合该正则的全球资源定位器(统一资源定位器)地址,并且可以自动补全,呼叫包指明哪一个处理函数来处理响应,跟随表示从响应中提取出的符合正则的全球资源定位器(统一资源定位器)是否要继续进行请求规则(链接提取器(allow=r /冷晓华/\d \html )、callback=parse_item ,follow=True),)def parse_item(self,response):item={ } # item[ title ]=response。XPath(/html/body/div[6]/div[1]/ul/Li[1]/span/a/text()).extract _ first()# print(re。查找全部( span a rel= no follow target= _ blank href= .*?\ d html (*?)/a /span ,response.body.decode(gb18030 ),re .S)) #这里按正则搜索笑话的标题因为我在re。查找所有(r span a rel= no follow target= _ blank href=/detail \ d/\ d html (s .*?)/a /span ,response.body.decode(gb18030 ),re .S): item[titles]=i产出项目返回项目管道代码:
类XiaohuaPipeline:def process _ item(self,item,spider): print(item) return item简单的打印来查看运行结果
案例爬取中国银监会网站的处罚信息分析网页信息得知,网页的具体数据信息都是网页通过发送埃阿斯请求,请求后端接口获取到数据数据,然后通过射流研究…动态的将数据嵌在超文本标记语言中,渲染出来。所以不能直接去请求网站域名,而是去请求后端的美国石油学会(美国石油协会)接口。并且通过比对翻页时请求的后端美国石油学会(美国石油协会)接口的变化,确定翻页时下页的网址。
蜘蛛;状似蜘蛛的物体;星形轮;十字叉;连接柄;十字头代码:
导入废料进口重新导入jsonclass CbircSpider(scrapy .蜘蛛):name= CB IRC allowed _ domains=[ CB IRC。gov . cn ]start _ URLs=[ https://www。CB IRC。gov . cn/]def解析(self,response):start _ URL= http://www .CB IRC。gov . cn/CB IRC web/DocInfo/SelectDocByItemIdAndChild? itemId=4113 pageSize=18 pageIndex=1 产生废料。请求(start_url,callback=self.parse1)定义parse1(自身,响应):#数据处理JSON _ data=响应。身体。decode()JSON _ data=JSON。在JSON _ data[ data ][ rows ],为I加载(JSON _ data):item={ } item[ doc _ name ]=I[ doc subtitle ]item[ doc _ id ]=I[ docId ]item[ doc _ time ]=I[ build date ]item[ doc _ detail ]=http://www.cbirc.gov.cn/cn/view/pages/ItemDetail.html?docId= str(I[ docId ]) itemId=4113一般类型= str(I[一般类型])产生项目#翻页,确定下一页的URL str _ URL=响应。请求。URL page=re。查找所有(r .*?pageIndex=(\d),str_url,re .S)[0] mid_url=str(str_url).strip(str(page))page=int(page)1 #请求的全球资源定位器(统一资源定位器)变化就是页,面,张,版的增加如果page=24:next _ URL=mid _ URL字符串(page)产生好斗的.请求(next_url,callback=self.parse1)管道代码:
导入CSV类CircplusPipeline:def process _ item(self,item,spider): with open(./circ_gb.csv , a ,编码=gb2312 )作为文件:fieldnames=[文档标识,文档名称,文档时间,文档详细信息] writer=csv .DictWriter(文件,字段名=字段名)Writer。writerow(item)返回item def open _ spider(self,spider): with open(./circ_gb.csv , a ,编码=gb2312 )作为文件:fieldnames=[文档标识,文档名称,文档时间,文档详细信息] writer=csv .DictWriter(文件,字段名=字段名)Writer。写标题()将数据保存在战斗支援车文件中
下载中间件学习下载中间件的使用,下载中间件用于初步处理将调度器发送给下载器的请求全球资源定位器(Uniform Resource Locator)或初步处理下载器请求后获取的反应
同时还有流程_异常方法用于处理当中间件程序抛出异常时进行的异常处理。
下载中间件的简单使用
自定义中间件的类,在类中定义过程的三个方法,方法中书写实现代码。注意要在设置中开启,将类进行注册。
代码尝试:
导入随机#适用于通过单个接口处理不同的项目类型从项目适配器导入is_item,项目适配器类randomuseargentmeddietridge:#处理请求def process_request(自身,请求,蜘蛛):ua=random。选择(蜘蛛。设置。get( USER _ ARENT _ LIST ))请求。headers[ USER-Agent ]=ua[0]class SelectRequestUserAgent:#处理响应定义流程_响应(自身、请求、响应、蜘蛛):打印(请求。标题[用户=代理])#需要返回一个回应(通过引擎将反应交给蜘蛛)或请求(通过引擎将请求交给调度器)或没有人返回响应类handlemiddlewareexception:#处理异常定义进程_异常(自身、请求、异常、蜘蛛):打印(异常)设置代码:
DOWNLOADER _ middleware={ 苏宁书。中间件。 randomuseargentmedmiddleware :543,苏宁书局。中间件。 selectrequestuseragent :544,苏宁书。中间件。 handlemiddlewareexception :544,}scrapy模拟登录scrapy携带甜饼干登录在scrapy中,开始网址不会经过允许的域的过滤,是一定会被请求,查看scrapy的源码,请求开始网址就是由开始请求方法操作的,因此通过自己重写开始请求方法可以为请求开始网址携带上甜饼干信息等,实现模拟登录等功能。
通过重写开始请求方法,为我们的请求携带上甜饼干信息,来实现模拟登录功能。
补充知识点:
scrapy中甜饼干信息是默认开启的,所以默认请求下是直接使用甜饼干的。可以通过开启COOKIE_DEBUG=True可以查看到详细的甜饼干在函数中的传递。
案例携带甜饼干模拟登录人人网通过重写开始请求方法,为请求携带上甜饼干信息,去访问需要登录后才能访问的页面,获取信息。模拟实现模拟登录的功能。
导入废料导入重新分类登录检查器(废料蜘蛛):name= log in allowed _ domains=[ renren。com ]start _ URLs=[ http://人人网。com/975252058/profile ]#重写方法定义开始请求(自身):#添加上甜饼干信息,这之后的请求中都会携带上该甜饼干信息cookies= anonymid=klx 1 odv 08 szk 4j;depo Vince=GW _ r01 _=1;泰和_ bi _ SDK _ uid=17 f 803 e 81753 a 44 Fe 40 be 7 ad 8032071 b;泰和_ bi _ SDK _ session=089 db 9062 fdfdbd 57 B2 da 32 e 92 cad1c 2;ick _ log in=666 a6c 12-9cd 1-433 b-9ad 7-97f 4a 595768d;_ de=49a 204 bb 9 e 35 c 5367 a 7153 c 3102580586 debb 8 c 2103 de 356;t=c 433 fa 35 a 370d 4d 8 e 662 f1 FB 4 ea 7 c 8838;社会guester=c 433 fa 35 a 370d 4d 8 e 662 f1 FB 4 ea 7 c 8838;id=975252058 xnsid=fadc 519 cjebecookies=db5f 9239-9800-4e 50-9 fc5-eaac 2c 445206 ;JSESSIONID=abcb 9 nqkvmo 0 mekr 6 ifgx;ver=7.0 log in from=nullWP _ fold=0 cookie={ I . split(=)[0]:I . split(=)[1]for I in cookie。拆分(;)}产量好斗的.Request( self.start_urls[0],callback=self.parse,cookies=cookie ) #打印用户名,验证是否模拟登录成功def parse(self,response): print(re.findall(该用户尚未开,response.body.decode(),re .斯))刺儿头模拟登录之发送邮政请求借助scrapy提供的来自请求对象发送邮政请求,并且可以设置从数据、标题、饼干等参数。
案例scrapy模拟登录开源代码库模拟登录GitHub,访问github.com/login,获取从参数,再去请求/会话验证账号密码,最后登录成功
蜘蛛;状似蜘蛛的物体;星形轮;十字叉;连接柄;十字头代码:
进口废品进口再进口随机类GithubSpider(废品).spider):name= github allowed _ domains=[ github。com ]start _ URLs=[ https://github。com/log in ]def parse(自身,响应):#先从注册页面的响应中获取出真实性_令牌和提交,在请求登录是必需authenticity _ token=response。XPath(//*[@ id= log in ]/div[4]/form/input[1]/@ value ).extract _ first()rand _ num 1=random。randint(100000,999999)rand _ num 2=random。randint(1000000,9999999)rand _ num=str(rand _ num 1)str(rand _ num 2)commit=response。XPath ///*[@ id= log in ]/div[4]/form/div/input[12]/@ value ).extract _ first()form _ data=dict(commit=commit,authentity _ token=authentity _ token,login=2864142427@qq.com ,password=tcc062556 ,timestamp=rand_num,# rusted _ device= ,)# form _ data[ web authn-support ]= # form _ data[ web authn-iuvpaa-support ]= # form _ data[ return _ to ]= # form _ data[ allow _ sign up ]]q=0.9,image/avif,image/webpq=0.8,应用/签约-交换;v=b3q=0.9 ,接受-语言: zh-CN,zh;q=0.9 , accept-encoding: gzip,deflate,br , origin: https://github.com } #借助来自请求发送邮政请求,进行登录产生刺痒感100 .表格要求。from _ response(response,formdata=form_data,headers=headers,callback=self。log in _ data)def log in _ data(自身,响应):#打印用户名验证是否登录成功打印(回复find all(向十二声,response.body.decode())) #保存成本地超文本标记语言文件带开(。/github.html , a ,编码=utf-8 )作为f: f.write(response.body.decode())总结:
模拟登录三种方式:1.携带甜饼干登录使用好斗的.请求(网址,回调=,cookies={ })
将饼干填入,在请求全球资源定位器(统一资源定位器)时会携带甜饼干去请求。
2.使用FormRequestscrapy .FromRequest(url,formdata={},callback=)
上传就是请求体,在上传中填入要提交的表单数据
3.借助from_responsescrapy .根据请求。from _ response(响应,表单数据={},回调=)
发件人回应会自动从响应中搜索到表单提交的地址(如果存在表单及提交地址)
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。