国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

Python scrapy爬取帶驗(yàn)證碼的列表數(shù)據(jù)

這篇具有很好參考價(jià)值的文章主要介紹了Python scrapy爬取帶驗(yàn)證碼的列表數(shù)據(jù)。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

首先所需要的環(huán)境:(我用的是Python2的,可以選擇python3,具體遇到的問(wèn)題自行解決,目前我這邊幾百萬(wàn)的數(shù)據(jù)量爬?。?br> 環(huán)境:

Python 2.7.10 
Scrapy Scrapy 1.5.0
第三方庫(kù):
PyMySQL==0.8.0
Scrapy==1.5.0
pytesseract==0.2.0
pip==10.0.1
Pillow==5.1.0
logger==1.4
bs4==0.0.1
requests==2.18.4

創(chuàng)建項(xiàng)目 
scrapy startproject mytest
創(chuàng)建爬蟲(chóng)程序
cd mytest 
scrapy genspider name XXX.com

直接貼代碼具體需要注意的特殊顏色標(biāo)出有注釋

-- coding: utf-8 --

import scrapy 
import pytesseract  #驗(yàn)證碼識(shí)別庫(kù)
from PIL import Image #驗(yàn)證碼圖片處理
from scrapy.http import Request
from yishi.items import YishiItem #items定義爬取字段
from yishi.settings import MYSQL_HOST, MYSQL_DBNAME, MYSQL_USER, MYSQL_PASSWD #settings數(shù)據(jù)庫(kù)配置 
import pymysql #連接數(shù)據(jù)庫(kù)
import logging #打印日志
#設(shè)置日志
log_filename = '../static/data/info.log'
logging.basicConfig(filename=log_filename, filemode='a', level=logging.INFO)  
class CreditSpider(scrapy.Spider):
	name = 'name'
	baseURL = 'https://xxx.com' 
	#start_urls = ''
	#設(shè)置headers,打開(kāi)網(wǎng)頁(yè)直接看請(qǐng)求headers復(fù)制進(jìn)去就可以了
	headers = {
		'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8',
		'Accept-Encoding': 'gzip, deflate, br',
		'Connection': 'keep-alive',
		'Host': 'xxx',
		'Upgrade-Insecure-Requests': 1,
		'User-Agent': 'xxx',
	}
	#數(shù)據(jù)庫(kù)
	connect = pymysql.connect(
		host=MYSQL_HOST,
		db=MYSQL_DBNAME,
		user=MYSQL_USER,
		passwd=MYSQL_PASSWD,
		charset='utf8',
		use_unicode=True)

	#重寫(xiě)start_requests
	def start_requests(self):
		return [Request(self.baseURL+'xxx',
						headers=self.headers,
						callback=self.parse,
						dont_filter=True, #scrapy會(huì)對(duì)request的URL去重(RFPDupeFilter),加上dont_filter則告訴它這個(gè)URL不參與去重
						)
				]

	#首先需要請(qǐng)求一次網(wǎng)頁(yè)
	def parse(self, response):
		#每次查詢(xún)1條數(shù)據(jù),搜索列表所需要的條件
		cursor = self.connect.cursor()
		sql = 'select id,xxx,xxx,xxx from xxx where xxx order by id limit 1'
		cursor.execute(sql)
		res = cursor.fetchall()
		if res:
			#請(qǐng)求網(wǎng)站所需要的參數(shù),搜索條件
			data = {
				"xxx": res[0][1],
				"xxx": '',
				"xxx": '',
				"xxx": res[0][2],
				"xxx": '',
				"xxx": '',
				"xxx": '',
			}
			cursor.close()
			return scrapy.Request(self.baseURL + '/xxx/captcha',  #驗(yàn)證碼圖片地址
								  headers=self.headers, 
								  meta={'data': data, 'dr_id': res[0][0], 'static': res[0][3], 'len': len(res)}, #第一次請(qǐng)求的參數(shù)傳給下次請(qǐng)求,可以保存cookie之類(lèi)的
								  callback=self.creditRes,
								  dont_filter=True
								  )
		else:
			#數(shù)據(jù)表中條件沒(méi)有的時(shí)候結(jié)束爬蟲(chóng),每次爬取要更新下條件表
			print '執(zhí)行完畢!'
			pass

	#再次請(qǐng)求存驗(yàn)證碼圖片
	def creditRes(self, response):
			#保存驗(yàn)證碼
			captchaFile = '../static/images/code/captcha.png'
			with open(captchaFile, 'wb') as f:
				f.write(response.body)
			try:
				#pytesseract識(shí)別驗(yàn)證碼
				image = Image.open(captchaFile)
				captcha_value = pytesseract.image_to_string(image)
				print '驗(yàn)證碼為:'+captcha_value
			except:
				#驗(yàn)證碼失敗 重新請(qǐng)求
				logging.info('驗(yàn)證碼獲取失敗')
				return self.start_urls
			#識(shí)別后的驗(yàn)證碼作為參數(shù)使用
			data = response.meta.get("data")
			data["validCode"] = captcha_value

			return [scrapy.FormRequest(
				url=self.baseURL+'xxx',  #帶上全部參數(shù)再次請(qǐng)求取數(shù)據(jù)
				formdata=data,
				method='GET',
				meta={'dr_id': response.meta.get("dr_id"), 'static': response.meta.get("static"), 'len': response.meta.get("len"),
					  'captcha_value': captcha_value}, #帶上部分參數(shù)保存或更新?tīng)顟B(tài)用
				headers=self.headers,
				callback=self.creditdata,
				dont_filter=True,
			)]

	def creditdata(self, response):
		#獲取驗(yàn)證碼錯(cuò)誤內(nèi)容,識(shí)別驗(yàn)證是否成功
		code_data = response.xpath("http://span[@class='error']")
		if code_data:
			code = code_data.xpath(".//text()").extract()[0].decode('UTF-8')
			logging.info('驗(yàn)證碼校驗(yàn)失敗,驗(yàn)證碼:'+str(response.meta.get("captcha_value")))
		else:
			code = ''
		#驗(yàn)證碼錯(cuò)誤時(shí)不更新?tīng)顟B(tài),繼續(xù)重復(fù)爬取
		dr_id = response.meta.get("dr_id")
		#不存在驗(yàn)證碼識(shí)別更新?tīng)顟B(tài),插入數(shù)據(jù)
		if code.strip() not in ('驗(yàn)證碼錯(cuò)誤', '驗(yàn)證碼不能為空'):
			cursor = self.connect.cursor()
			sql = 'update xxx set status=%s where id=%s' % (1, dr_id)
			cursor.execute(sql)
			self.connect.commit()
			cursor.close()
		else:
			#驗(yàn)證碼失敗不更新?tīng)顟B(tài)
			logging.info('驗(yàn)證碼錯(cuò)誤')

		node_list = response.xpath("http://table[@id='formresult']/tbody/tr")
		# 更新?tīng)顟B(tài) 0還未抓取數(shù)據(jù) 1已經(jīng)抓取
		logging.info('當(dāng)前執(zhí)行條件表id為'+ str(dr_id))
		if node_list:
			for node in node_list:
				item = YishiItem()
				item['xxx'] = dr_id
				item['xxx'] = node.xpath(".//td[1]/text()").extract()[0].decode('UTF-8')
				item['xxx'] = node.xpath(".//td[2]/text()").extract()[0].decode('UTF-8')
				item['xxx'] = node.xpath(".//td[3]/text()").extract()[0].decode('UTF-8')
				item['xxx'] = node.xpath(".//td[4]/text()").extract()[0].decode('UTF-8')
				item['xxx'] = node.xpath(".//td[5]/text()").extract()[0].decode('UTF-8')
				item['xxx'] = node.xpath(".//td[6]/text()").extract()[0].decode('UTF-8')
				item['xxx'] = node.xpath(".//td[7]/text()").extract()[0].decode('UTF-8')
				yield item
		#分頁(yè)數(shù)據(jù),根據(jù)下一頁(yè)爬取,可獲取下頁(yè)按鈕狀態(tài)去爬取分頁(yè)數(shù)據(jù)
		nextPage = response.xpath("http://a[@class='disable' and @class='next']")
		if nextPage:
			if not len(nextPage):
				#下一頁(yè)a標(biāo)簽url
				url = response.xpath("http://a[@class='disable' and @class='next']/@href").extract()[0]
				yield scrapy.Request(self.baseURL+'/'+url, callback=self.creditdata)

		# 根據(jù)狀態(tài)status=0判斷是否繼續(xù)爬取數(shù)據(jù)
		len = response.meta.get("len")
		if not len == 0:
			yield scrapy.Request(self.baseURL+'xxx',
								 headers=self.headers,
								 callback=self.parse,
								 dont_filter=True)


items設(shè)置:
	xxx = scrapy.Field()
	xxx = scrapy.Field()
...

pipelines存數(shù)據(jù)庫(kù)這個(gè)就不說(shuō)了根據(jù)自己的業(yè)務(wù)
注:目前我網(wǎng)站驗(yàn)證碼比較簡(jiǎn)單可以直接使用pytesseract,識(shí)別率95%以上,也可以用別的方式CNN等方式識(shí)別
個(gè)人感覺(jué)用 requests.get() 方式寫(xiě)要簡(jiǎn)單一些,本地已測(cè)試過(guò),根據(jù)業(yè)務(wù)需求用scrapy完成的。
requests.get() 主要問(wèn)題就是 session = requests.session() 這句是重點(diǎn)文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-801032.html

到了這里,關(guān)于Python scrapy爬取帶驗(yàn)證碼的列表數(shù)據(jù)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來(lái)自互聯(lián)網(wǎng)用戶(hù)投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 網(wǎng)絡(luò)爬蟲(chóng)丨基于scrapy+mysql爬取博客信息并保存到數(shù)據(jù)庫(kù)中

    網(wǎng)絡(luò)爬蟲(chóng)丨基于scrapy+mysql爬取博客信息并保存到數(shù)據(jù)庫(kù)中

    本期內(nèi)容 :基于scrapy+mysql爬取博客信息并保存到數(shù)據(jù)庫(kù)中 實(shí)驗(yàn)需求 anaconda丨pycharm python3.11.4 scrapy mysql 項(xiàng)目下載地址:https://download.csdn.net/download/m0_68111267/88740730 本次實(shí)驗(yàn)實(shí)現(xiàn)了:使用Scrapy框架爬取博客專(zhuān)欄的目錄信息并保存到MySQL數(shù)據(jù)庫(kù)中,實(shí)驗(yàn)主要涉及到Python的爬蟲(chóng)技術(shù)以

    2024年01月17日
    瀏覽(20)
  • python爬蟲(chóng)進(jìn)階篇:Scrapy中使用Selenium模擬Firefox火狐瀏覽器爬取網(wǎng)頁(yè)信息

    接著上一篇的筆記,Scrapy爬取普通無(wú)反爬、靜態(tài)頁(yè)面的網(wǎng)頁(yè)時(shí)可以順利爬取我們要的信息。但是大部分情況下我們要的數(shù)據(jù)所在的網(wǎng)頁(yè)它是動(dòng)態(tài)加載出來(lái)的(ajax請(qǐng)求后傳回前端頁(yè)面渲染、js調(diào)用function等)。這種情況下需要使用selenium進(jìn)行模擬人工操作瀏覽器行為,實(shí)現(xiàn)自動(dòng)化

    2024年02月04日
    瀏覽(101)
  • 爬蟲(chóng)學(xué)習(xí)筆記-scrapy鏈接提取器爬取讀書(shū)網(wǎng)鏈接寫(xiě)入MySQL數(shù)據(jù)庫(kù)

    爬蟲(chóng)學(xué)習(xí)筆記-scrapy鏈接提取器爬取讀書(shū)網(wǎng)鏈接寫(xiě)入MySQL數(shù)據(jù)庫(kù)

    1.終端運(yùn)行scrapy startproject scrapy_read,創(chuàng)建項(xiàng)目 2.登錄讀書(shū)網(wǎng),選擇國(guó)學(xué)(隨便點(diǎn)一個(gè)) 3.復(fù)制鏈接(后面修改為包括其他頁(yè)) ?4.創(chuàng)建爬蟲(chóng)文件,并打開(kāi) ?5.滑倒下方翻頁(yè)處,右鍵2,點(diǎn)擊檢查,查看到a標(biāo)簽網(wǎng)址,復(fù)制 6.修改爬蟲(chóng)文件規(guī)則allow(正則表達(dá)式),\\\'d\\\'表示數(shù)字,\\\'+\\\'表示多個(gè),\\\'.\\\'使\\\'.\\\'生效

    2024年02月19日
    瀏覽(27)
  • Python爬蟲(chóng)之Scrapy框架系列(21)——重寫(xiě)媒體管道類(lèi)實(shí)現(xiàn)保存圖片名字自定義及多頁(yè)爬取

    spider文件中要拿到圖片列表并yield item; item里需要定義特殊的字段名:image_urls=scrapy.Field(); settings里設(shè)置IMAGES_STORE存儲(chǔ)路徑,如果路徑不存在,系統(tǒng)會(huì)幫助我們創(chuàng)建; 使用默認(rèn)管道則在s

    2024年02月10日
    瀏覽(94)
  • python爬蟲(chóng)進(jìn)階篇:Scrapy中使用Selenium+Firefox瀏覽器爬取滬深A(yù)股股票行情

    上篇記錄了Scrapy搭配selenium的使用方法,有了基本的了解后我們可以將這項(xiàng)技術(shù)落實(shí)到實(shí)際需求中。目前很多股票網(wǎng)站的行情信息都是動(dòng)態(tài)數(shù)據(jù),我們可以用Scrapy+selenium對(duì)股票進(jìn)行實(shí)時(shí)采集并持久化,再進(jìn)行數(shù)據(jù)分析、郵件通知等操作。 詳情請(qǐng)看上篇筆記 items middlewares setti

    2024年02月04日
    瀏覽(29)
  • python爬蟲(chóng) scrapy+selenium+webdriver實(shí)現(xiàn)鼠標(biāo)滑動(dòng)破解阿里云盾快驗(yàn)證

    在爬取jianshu文章的時(shí)候發(fā)現(xiàn),jianshu竟然買(mǎi)了阿里云的盾塊驗(yàn)證?。?!很是頭疼,雖然說(shuō)沒(méi)有其他圖片匹配的那么麻煩,但是阿里云的人機(jī)驗(yàn)證和算法真的是頂尖的,查閱了多個(gè)資料最后沒(méi)辦法,才實(shí)現(xiàn)用webdriver模擬鼠標(biāo)去通過(guò)驗(yàn)證 首先我們需要安裝webdriver驅(qū)動(dòng)和Google Chrom

    2024年02月03日
    瀏覽(104)
  • scrapy爬蟲(chóng)爬取多網(wǎng)頁(yè)內(nèi)容

    摘要 :此案例是爬取目標(biāo)網(wǎng)站( https://tipdm.com/ )的 新聞中心 板塊的 公司新聞 中所有新聞的標(biāo)題、發(fā)布時(shí)間、訪(fǎng)問(wèn)量和新聞的文本內(nèi)容。 我使用的是 Anaconda prompt 我們使用如下命令創(chuàng)建scrapy項(xiàng)目: scrapy startproject spider_name 爬蟲(chóng)路徑 spider_name 是項(xiàng)目的名字 爬蟲(chóng)路徑 就是項(xiàng)目

    2023年04月21日
    瀏覽(29)
  • Python小姿勢(shì) - Python爬取數(shù)據(jù)的庫(kù)——Scrapy

    Python小姿勢(shì) - Python爬取數(shù)據(jù)的庫(kù)——Scrapy

    Python爬取數(shù)據(jù)的庫(kù)——Scrapy 一、爬蟲(chóng)的基本原理 爬蟲(chóng)的基本原理就是模擬人的行為,使用指定的工具和方法訪(fǎng)問(wèn)網(wǎng)站,然后把網(wǎng)站上的內(nèi)容抓取到本地來(lái)。 爬蟲(chóng)的基本步驟: 1、獲取URL地址: 2、發(fā)送請(qǐng)求獲取網(wǎng)頁(yè)源碼; 3、使用正則表達(dá)式提取信息; 4、保存數(shù)據(jù)。 二、爬

    2024年02月02日
    瀏覽(15)
  • 網(wǎng)絡(luò)爬蟲(chóng)丨基于scrapy+mysql爬取博客信息

    網(wǎng)絡(luò)爬蟲(chóng)丨基于scrapy+mysql爬取博客信息

    本期內(nèi)容 :基于scrapy+mysql爬取博客信息并保存到數(shù)據(jù)庫(kù)中 實(shí)驗(yàn)需求 anaconda丨pycharm python3.11.4 scrapy mysql 項(xiàng)目下載地址:https://download.csdn.net/download/m0_68111267/88740730 本次實(shí)驗(yàn)實(shí)現(xiàn)了:使用Scrapy框架爬取博客專(zhuān)欄的目錄信息并保存到MySQL數(shù)據(jù)庫(kù)中,實(shí)驗(yàn)主要涉及到Python的爬蟲(chóng)技術(shù)以

    2024年03月18日
    瀏覽(19)
  • 爬蟲(chóng)學(xué)習(xí)筆記-scrapy爬取電影天堂(雙層網(wǎng)址嵌套)

    爬蟲(chóng)學(xué)習(xí)筆記-scrapy爬取電影天堂(雙層網(wǎng)址嵌套)

    ? 1.終端運(yùn)行scrapy startproject movie,創(chuàng)建項(xiàng)目 2.接口查找 ?3.終端cd到spiders,cd scrapy_carhome/scrapy_movie/spiders,運(yùn)行?scrapy genspider mv https://dy2018.com/ 4.打開(kāi)mv,編寫(xiě)代碼,爬取電影名和網(wǎng)址 5.用爬取的網(wǎng)址請(qǐng)求,使用meta屬性傳遞name?,callback調(diào)用自定義的parse_second 6.導(dǎo)入ScrapyMovieItem,將movie對(duì)象

    2024年02月19日
    瀏覽(27)

覺(jué)得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包