当前位置 博文首页 > Asia-Lee:Python3网络爬虫——(5)Scrapy爬虫基础
目录
1、Scrapy常用命令行
2、Scrapy爬取内容
3、Scrapy数据提取
4、Scrapy爬取中国大陆明星
5、12306火车站站名爬取
scrapy startproject QuotesSpider? ? ? ? ? ?#创建项目
scrapy crawl XX? ? ? ? ? ? ? ? ? #运行XX蜘蛛
scrapy shell http://www.scrapyd.cn? ? ? ? ? ? ? ? ? ? ?#调试网址为http://www.scrapyd.cn的网站
scrapy version? ? ? ? ? ? ? ? ?#查看版本
scrapy list? ? ? ? ? ? ? ? #显示有多少个蜘蛛
?#scrapy爬取?http://lab.scrapyd.cn?中的名言内容、作者、标签
import scrapy
?
class QuoteSpider(scrapy.Spider): ? # #需要继承scrapy.Spider类
? ?name = 'mingyan' ?#定义蜘蛛名
? ?# 定义爬取的链接
? ?#start_urls = ['http://lab.scrapyd.cn/page/1/',]
? ?start = 1
? ?end = 50
? ?start_urls = ('http://lab.scrapyd.cn/page/' + str(i) + '/' for i in range(1, end))
?
? ?# 通过链接爬取页面,定义规则提取数据
? ?def parse(self, response):
? ? ? ?mingyan = response.css('div.quote') ?# 提取首页所有名言,保存至变量mingyan
?
? ? ? ?for v in mingyan: ?# 循环获取每一条名言里面的:名言内容、作者、标签
? ? ? ? ? ?text = v.css('.text::text').extract_first() ?# 提取名言
? ? ? ? ? ?autor = v.css('.author::text').extract_first() ?# 提取作者
? ? ? ? ? ?tags = v.css('.tags .tag::text').extract() ?# 提取标签
? ? ? ? ? ?tags = ','.join(tags) ?# 数组转换为字符串
? ? ? ? ? ?"""
? ? ? ? ? 接下来进行写文件操作,每个名人的名言储存在一个txt文档里面
? ? ? ? ? """
? ? ? ? ? ?fileName = '%s-语录.txt' % autor ?# 定义文件名,如:木心-语录.txt
?
? ? ? ? ? ?with open(fileName, "a+") as f: ?# 不同人的名言保存在不同的txt文档,“a+”以追加的形式
? ? ? ? ? ? ? ?f.write(text)
? ? ? ? ? ? ? ?f.write('\n') ?# ‘\n’ 表示换行
? ? ? ? ? ? ? ?f.write('标签:' + tags)
? ? ? ? ? ? ? ?f.write('\n-------\n')
? ? ? ? ? ? ? ?f.close()
xpath选择器
css选择器
import scrapy
#中国大陆明星姓名爬取
class itemSpider(scrapy.Spider):
name = 'starname'
start_urls = ['http://www.manmankan.com/dy2013/mingxing/neidi/#']
def parse(self, response):
for i in range(1,27):
name_list=response.css('div.i_cont_s')[i].xpath('./a/@title').extract()
with open('data/name_list','a+') as f:
for name in name_list:
f.write(str(name)+'\n')
import requests
import re
def getStation():
# 12306的火车站名和代码js文件url
url = 'https://kyfw.12306.cn/otn/resources/js/framework/station_name.js?station_version=1.9018'
r = requests.get(url, verify=False)
pattern = u'([\u4e00-\u9fa5]+)\|([A-Z]+)'
result = re.findall(pattern, r.text)
station = dict(result)
return station
file=open('data/railway_station','w')
stations=getStation()
stations_list=[]
for key,value in stations.items():
stations_list.append(key)
file.write(str(key)+'\n')
file.close()
?
cs