九眼智能信息过滤 大数据助力产品升级解析
918
2022-10-11
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小时内删除侵权内容。
发表评论
暂时没有评论,来抢沙发吧~