第一次使用scrapy,记下爬过的坑
1,xpath语法,xpath语法用于选取需要的数据,用过bs4会比较好的理解它,类似于从一目录树查找,
xpath('/html/body/div/div'),这是绝对路径找数据
xpath('//*[@id = “niubi”]'),这是相对路径找数据
还可以选择从绝对路径到某一路径下,找一个“特殊”的数据
xpath('//*a/html/body/div1/div2),找div2下的所有a标签
2,找到后,需要实例化,这是第二个坑,实例化有extract()函数,然后才能转换成字符串,之后就能操作数据了
3,在爬虫脚本中,spider中,如果需要定义全局变量,千万不能定义name,估计一些scrapy的关键字也不能定义,不然爬虫莫名死掉
4,回调函数,parse中的值,不能传入回调函数中,不知道是不是我技术不行呢,就是传不进去- -
5,item,在起始位置,from导入之后,需要在使用的函数内,或者说class中定义静态方法,item = xxxitem(),不然它不认识你的数组,但是在pipeline中却不需要
1 # -*- coding: utf-8 -*-
import scrapy
from text.items import TextItem
import sys
class ExampleSpider(scrapy.Spider):
name = "qunimade"
allowed_domains = ["biquge.com.tw"]
start_urls = ( 10 'http://www.biquge.com.tw/11_11850',)
global d,n
d = {} 13 n = ''
def parse(self,response):
shou = response.xpath('/html/body/div/div/div/dl/dd/a/@href')
wen = response.xpath('/html/body/div/div/div/dl/dd/a/text()')
n = response.xpath('/html/body/div/div/div/div/h1/text()').extract()[0]
x = 1
for t in wen.extract():
t.strip() 21 d[t] = x
x = x + 1 23 po = 'http://www.biquge.com.tw'
for i in shou.extract(): 26 p = po + i 27 yield scrapy.Request(p,callback = self.parse_1) 28 29 30 31 32 def parse_1(self, response): 33 item = TextItem() 34 h1 = response.xpath('/html/body/div/div/div/div/h1/text()') 35 r = h1[0].extract() 36 r = r.strip() 37 item['zhangjie'] = r 38 tt = d[r]