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 = {'' : 优先级}
- 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 = {}
- 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