标签:get selector 源码 project -- href yield dom 入门实战
采集目标:采集西祠网的IP代理 包括 IP PORT
scrapy startproject xicidailiSpider
# scrapy 新建项目 项目名
scrapy genspider xicidaili xicidaili.com
# scrapy 产生爬虫 爬虫名字 网站域名
# 注意:爬虫名字一定不能与项目名字一致!
可以看到,在项目的spiders下得到了一个爬虫文件
解释爬虫文件
import scrapy # 导入scrapy
# 创建爬虫类 并且继承自scrapy.Spider --> 爬虫最基础的类
# 另外几个类都是继承自这个类
class XicidailiSpider(scrapy.Spider):
#爬虫名字 --> 必须唯一
name = ‘xicidaili‘
# 允许采集的域名
allowed_domains = [‘xicidaili.com‘]
# 开始采集的网站
start_urls = [‘http://xicidaili.com/‘]
# 解析响应数据 提取数据 或者网址等 response就是网页源码
def parse(self, response):
pass
提取数据
response.xpath("xpath语法").get()
get() 是得到一个元素
getall() 是多个元素
class XicidailiSpider(scrapy.Spider):
name = ‘xicidaili‘
allowed_domains = [‘xicidaili.com‘]
start_urls = [‘https://www.xicidaili.com/nn/‘]
# start_urls = [f‘https://www.xicidaili.com/nn/{page}‘ for page in range(1,3685)]
def parse(self, response):
# 提取数据
# response.xpath("//tr/td[2]/text()")
selectors = response.xpath("//tr")
for selector in selectors:
ip = selector.xpath("./td[2]/text()").get() # . 在当前节点下继续选择
port = selector.xpath("./td[3]/text()").get()
# ip = selector.xpath("./td[2]/text()").extract_first() # 与get等价
# port = selector.xpath("./td[3]/text()").extract_first()
print(ip,port)
scrapy crawl 爬虫名字
# 翻页操作
next_page = response.xpath(‘//a[@class="next_page"]/@href‘).get()
if next_page:
print(next_page)
# 拼接网址
next_url = response.urljoin(next_page)
yield scrapy.Request(next_url,callback=self.parse) # yield 生成器
# Request() 发送请求 类似requests.get()
# callback 是回调函数 将发出去的请求得到的响应还交给自己(self.parse)处理
# 注意:回调函数不要写() 只写方法名字
标签:get selector 源码 project -- href yield dom 入门实战
原文地址:https://www.cnblogs.com/yanadoude/p/13186446.html