Spider Scrapy 框架爬虫
scrapy?是一款常用的爬蟲(chóng)框架,可以實(shí)現(xiàn)分布式爬蟲(chóng)和高性能的爬蟲(chóng)
scrapy?框架的創(chuàng)建實(shí)在cmd命令行下進(jìn)行的:
首先要在命令行下轉(zhuǎn)到你要?jiǎng)?chuàng)建的文件夾下:
cd?目標(biāo)文件夾路徑?創(chuàng)建的是一個(gè)工程
創(chuàng)建命令:
scrapy?startproject? 工程名稱 (自己隨意)
創(chuàng)建完工程后要進(jìn)入到工程文件夾下,穿件爬蟲(chóng)(spider)文件
創(chuàng)建爬蟲(chóng)文件:
scrapy genspider?爬蟲(chóng)文件名? 目標(biāo)url(初始的URL必須要有)
紅色部分是自己加的代碼,解析數(shù)據(jù)的,其他的都是創(chuàng)建完成后的原始代碼
import scrapyclass QiubaiSpider(scrapy.Spider):name = 'qiubai'#allowed_domains = ['www.qiushibaike.com/text'] # 這一行推薦注釋掉,因?yàn)楹竺嫒绻阌行枰鶕?jù)解析的URL再次進(jìn)行爬取的時(shí)候,可能會(huì)出問(wèn)題。 表示的是域名范圍,在這個(gè)域名下的URL才可以爬取,不是不能被爬取。start_urls = ['https://www.qiushibaike.com/text/'] # 這個(gè)URL是可以的,https://www.baidu.com 這個(gè)URL九不能被爬取的,因?yàn)樯厦娴南拗?#xff0c;但是上面也可以加多個(gè)域名def parse(self, response):# 建議使用想path進(jìn)行內(nèi)容解析,scrapy已經(jīng)集成了xpath接口div_list = response.xpath('//div [@id="content-left"]/div') # xpath表達(dá)式 //div表示所有div [@id="content-left"] div的IDdata_list = []for div in div_list:# .extract() 可以將xpath返回的selector對(duì)象中的值取出 xpath返回的是一個(gè)列表,列表中的元素是selector對(duì)象# author = div.xpath('./div/a[2]/h2/text()').extract() # xpath表達(dá)式./表示的是在當(dāng)前的div下 a[2] 表示這個(gè)div下的第二個(gè)a標(biāo)簽 author = div.xpath('./div/a[2]/h2/text()').extract_first()# .extract_first() == extract()[0]content = div.xpath('.//div[@class="content"]/span/text()').extract()
# 將解析到的作者和內(nèi)容數(shù)據(jù)封裝到字典中,然后再將字典追加到列表中,parse只能返回可迭代類型或者是空
dict = {
”author“: author,
"content": content
}
data_list.append(dict)
return data_list
接下來(lái)需要改一下配置文件(sttings.py)這個(gè)文件也是創(chuàng)建完工程后就有的,在里面改一下第19號(hào),user_agent?請(qǐng)求頭信息?和 22行 ROBOTSTXT_OBEY?改成 False
最后就是運(yùn)行了,運(yùn)行也是需要在cmd命令行下進(jìn)行運(yùn)行
運(yùn)行命令:
scrapy? crawl?爬蟲(chóng)文件名 --nolog? ? ? ?# --nolog是表示不打印任何的日志
scrapy crawl?爬蟲(chóng)文件名 -o?磁盤文件名.后綴? -o?表示將返回的可迭代類型的數(shù)據(jù)寫(xiě)入指定的文件中? (操作后寫(xiě)入csv文件結(jié)果出現(xiàn)亂碼,暫時(shí)不知道是什么原因)
轉(zhuǎn)載于:https://www.cnblogs.com/wei-yu/p/10401118.html
總結(jié)
以上是生活随笔為你收集整理的Spider Scrapy 框架爬虫的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: UOJ最强跳蚤
- 下一篇: Python基础学习----参数和返回值