spider cookies

html转为json类型时提示’json.decoder.JSONDecodeError’

html转为json类型
部分显示会因内容格式导致 “json.decoder.JSONDecodeError”
strict=False 非严格模式 (解决 JSONDecodeError)
json_html = json.loads(html, strict=False)


chromedriver设置无界面模式

from selenium import webdriver
options = webdriver.ChromeOptions()
# 添加无界面参数
options.add_argument('--headless')
browser = webdriver.Chrome(options=options)
browser.get('http://www.baidu.com/')
browser.save_screenshot('baidu.png')

selenium中通过代码实现切换窗口功能

# 获取当前所有句柄(窗口)
all_handles = browser.window_handles

# 切换到新的窗口
browser.switch_to_window(all_handles[1])  # 切换到第二个窗口

使用contains()获取内容'title'包含'行政区划代码'的值


 td_list = elements.xpath('//td[@class="arlisttd"]/a[contains(@title,"行政区划代码")]')

scrapy选择器对象中获取元素

result = response.xpath('/html/head/title/text()').extract()

scrapy选择器对象获取第一个元素

# 1.6版本后才能用get() ,获取第一个数据
result = response.xpath('/html/head/title/text()').get()
result = response.xpath('/html/head/title/text()').extract_first()

scrapy 设置文件保存路径

# settings.py
# linux
IMAGES_STORE = '/home/tarena/image/'
# windows
IMAGES_STORE = 'D:\\spider\\image\\'

大量User-Agent切换(中间件)
middlewares.py设置中间件

1、获取User-Agent
   # 方法1 :新建useragents.py,存放大量User-Agent,random模块随机切换
   # 方法2 :安装fake_useragent模块(sudo pip3 install fack_useragent)
       from fake_useragent import UserAgent
       ua_obj = UserAgent()
       ua = ua_obj.random
2、middlewares.py新建中间件类
	class RandomUseragentMiddleware(object):
		def process_request(self,reuqest,spider):
    		ua = UserAgent()
    		request.headers['User-Agent'] = ua.random
3、settings.py添加此下载器中间件
	DOWNLOADER_MIDDLEWARES = {'' : 优先级}

  1. scrapy中settings.py设定
# 1、设置日志级别
LOG_LEVEL = ''
# 2、保存到日志文件(不在终端输出)
LOG_FILE = ''
# 3、设置数据导出编码(主要针对于json文件)
FEED_EXPORT_ENCODING = ''
# 4、非结构化数据存储路径
IMAGES_STORE = '路径'
# 5、设置User-Agent
USER_AGENT = ''
# 6、设置最大并发数(默认为16)
CONCURRENT_REQUESTS = 32
# 7、下载延迟时间(每隔多长时间请求一个网页)
# DOWNLOAD_DELAY 会影响 CONCURRENT_REQUESTS,不能使并发显现
# 有CONCURRENT_REQUESTS,没有DOWNLOAD_DELAY: 服务器会在同一时间收到大量的请求
# 有CONCURRENT_REQUESTS,有DOWNLOAD_DELAY 时,服务器不会在同一时间收到大量的请求
DOWNLOAD_DELAY = 3
# 8、请求头
DEFAULT_REQUEST_HEADERS = {}
# 9、添加项目管道
ITEM_PIPELINES = {}
# 10、添加下载器中间件
DOWNLOADER_MIDDLEWARES = {}

  1. scrapy分布式settings.py的设定
# 重新指定调度器: 启用Redis调度存储请求队列
SCHEDULER = "scrapy_redis.scheduler.Scheduler"

# 重新指定去重机制: 确保所有的爬虫通过Redis去重	(一定要加上)
DUPEFILTER_CLASS = "scrapy_redis.dupefilter.RFPDupeFilter"

# 不清除Redis队列: 暂停/恢复/断点续爬
SCHEDULER_PERSIST = True

# 优先级队列 (默认)
SCHEDULER_QUEUE_CLASS = 'scrapy_redis.queue.PriorityQueue'
#可选用的其它队列
# 先进先出队列
SCHEDULER_QUEUE_CLASS = 'scrapy_redis.queue.FifoQueue'
# 后进先出队列
SCHEDULER_QUEUE_CLASS = 'scrapy_redis.queue.LifoQueue'

# redis管道
ITEM_PIPELINES = {
    'scrapy_redis.pipelines.RedisPipeline': 300
}

#指定连接到redis时使用的端口和地址
REDIS_HOST = 'localhost'
REDIS_PORT = 6379
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值