scrapy 教程笔记

网友投稿 918 2022-10-11

scrapy 教程笔记

scrapy 教程笔记

Scrapy 框架学习笔记及截图

多个页面的请求之下一个页面

● 获取当前链接内容及下一个链接的内容方式:

○ 使用yield 返回当前页面的数据,当前页面的数据返回完成后(for 循环完成后) 再处理下一个链接的地址,使用 ​​yield​​ 返回下一个链接的请求结果.

● 设置请求头:

● 设置管道操作:

ITEM_PIPELINES = { 'scrapy_rere.pipelines.ScrapyRerePipeline': 300,}

● 管道的使用:

class ScrapyRerePipeline(object): def __init__(self): pass def process_item(self, item, spider): return item def open_spider(self, spider): pass # spider (Spider 对象) – 被开启的spider # 可选实现,当spider被开启时,这个方法被调用。 def close_spider(self, spider): pass # spider (Spider 对象) – 被关闭的spider # 可选实现,当spider被关闭时,这个方法被调用

crawlspider的使用

● 比spider要高级,可以定义规则自动爬取页面中的链接

● 规则为链接的正则表达式

代码分析:

# -*- coding: utf-8 -*-import scrapyfrom scrapy.linkextractors import LinkExtractorfrom scrapy.spiders import CrawlSpider, Rulefrom scrapy.import HtmlResponsefrom scrapy.selector.unified import SelectorListclass RereCrawlSpider(CrawlSpider): name = 'rere_crawl' allowed_domains = ['rereapi.com'] start_urls = [' rules = ( Rule(LinkExtractor(allow=r'.+m=vod-index-pg-\d+\.html'), callback='parse_item', follow=True), Rule(LinkExtractor(allow=r'.+m=vod-detail-id-\d+\.html'), callback='parse_item1', follow=False), ) def parse_item(self, response): # response HtmlResponse 对象 # res 是SelectorList if isinstance(response,HtmlResponse): res = response.css('.xing_vb4>a::attr(href)') print(res.extract()) item = {} #item['domain_id'] = response.xpath('//input[@id="sid"]/@value').get() #item['name'] = response.xpath('//div[@id="name"]').get() #item['description'] = response.xpath('//div[@id="description"]').get() return item def parse_item1(self,response): if isinstance(response,HtmlResponse): res = response.css('div.vodh>h2::text') print(res.extract()) return {}

css 选择器怎样定位到元素的属性值:答案:例如​​​res = response.css('.xing_vb4>a::attr(href)')​​css 选择器怎样获取元素中的文本值:答案:例子:​​​res = response.css('div.vodh>h2::text')​​

scrapy shell 命令可以再任意位置执行

执行命令:

scrapy shell 'http://baidu.com/'

如果要要读取项目中的配置文件,则需要在项目文件夹中执行该命令.在爬取数据是需要登陆了的情况下需要先重写​​start_request​​方法,并且回调​​callback​​指定的函数,调用其他的请求方法 模拟登录请求可以使用引入类​​formrequest​​可以方便提交

图片和文件的爬虫:

*自动添加请求的数据:

from selenium.webdriver.common.by import Byfrom selenium.webdriver.common.keys import Keysfrom selenium.webdriver.support.ui import WebDriverWaitfrom selenium.webdriver.support.expected_conditions import presence_of_element_located# # This example requires Selenium WebDriver 3.13 or newerdef func(): with webdriver.Firefox as driver: wait = WebDriverWait(driver, 10) driver.get(" driver.find_element(By.ID, "").send_keys("cheese" + Keys.RETURN) first_result = wait.until(presence_of_element_located(By.CSS_SELECTOR, "body")) print(first_result.get_attribute("textContent"))

​​提高爬取效率:可以将浏览器设置为无图模式,例如火狐的无图模式设置:1、在地址栏输入about:config,打开设置。2、将permissions.default.image项设置为2。

分布式爬虫:

scrapy-redis

scrapy 安装:

将项目变为分布式爬虫:

懂得,原来世界如此简单!

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:elasticsearch的zenDiscovery和master选举机制原理分析
下一篇:odoo 导入文件xml制作,使用csv 文件制作xml 文件
相关文章

 发表评论

暂时没有评论,来抢沙发吧~